2016-06-23 3 views
3

Я создаю приложение для Android с viewpager и fragment. Я использую две кнопки на фрагменте, чтобы идти вперед и назад. Когда я использую прямое действие, следующий фрагмент появляется справа налево. Это означает, что в этом действии фрагменты изменяются справа налево.Как получить предыдущий фрагмент справа налево на viewpager в android

Вот мой рабочий код,

MainActivity.java

public class MainActivity extends FragmentActivity { 

    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     viewPager=(ViewPager)findViewById(R.id.viewPager); 
     viewPager.setAdapter(new MyPagerAdapter2(getSupportFragmentManager())); 
     viewPager.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (viewPager.getCurrentItem() == 0) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 1) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 2) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 3) { 
        return true; 
       } 

       if (viewPager.getCurrentItem() == 4) { 
        return true; 
       } 

       return false; 
      } 
     }); 



    } 

    private class MyPagerAdapter2 extends FragmentPagerAdapter { 

     public MyPagerAdapter2(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int pos) { 
      switch(pos) { 

       case 0: return FirstFragment1.newInstance("FirstFragment_1"); 
       case 1: return SecondFragment1.newInstance("SecondFragment_1"); 
       case 2: return ThirdFragment1.newInstance("ThirdFragment_1"); 
       case 3: return FourthFragment1.newInstance("FourthFragment_1"); 
       case 4: return FifthFragment1.newInstance("FifthFragment_1"); 
       default: return FirstFragment1.newInstance("DefaultFragment_1"); 
      } 
     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 
    } 

    public void setCurrentItem(int which) { 
     if(viewPager != null && which >= 0 && which <= 4) { 
      viewPager.setCurrentItem(which); 
     } 
    } 
} 

FirstFragment1.java

public class FirstFragment1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.first_frag_1, container, false); 

     TextView tv = (TextView) v.findViewById(R.id.tvFragFirst); 
     tv.setText(getArguments().getString("msg")); 


     Button button1=(Button)v.findViewById(R.id.nextButton); 
     button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (getActivity() != null) { 
        ((MainActivity)getActivity()).setCurrentItem(1); // fourth fragment index is 3 
       } 
      } 
     }); 

     return v; 
    } 

    public static FirstFragment1 newInstance(String text) { 

     FirstFragment1 f = new FirstFragment1(); 
     Bundle b = new Bundle(); 
     b.putString("msg", text); 

     f.setArguments(b); 

     return f; 
    } 

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser) { 
      Activity a = getActivity(); 
      if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 
     } 
    } 

} 

SecondFragment1.java

public class SecondFragment1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.second_frag_1, container, false); 

     TextView tv = (TextView) v.findViewById(R.id.tvFragSecond); 
     tv.setText(getArguments().getString("msg")); 


     Button button=(Button)v.findViewById(R.id.printButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(getActivity() != null) { 
        ((MainActivity)getActivity()).setCurrentItem(0); // second fragment index is 1 


       } 

      } 
     }); 

     Button button1=(Button)v.findViewById(R.id.nextButton); 
     button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (getActivity() != null) { 
        ((MainActivity)getActivity()).setCurrentItem(2); // fourth fragment index is 3 


       } 
      } 
     }); 

     return v; 
    } 

    public static SecondFragment1 newInstance(String text) { 

     SecondFragment1 f = new SecondFragment1(); 
     Bundle b = new Bundle(); 
     b.putString("msg", text); 

     f.setArguments(b); 

     return f; 
    } 

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser) { 
      Activity a = getActivity(); 
      if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 
     } 
    } 

} 

Когда я использую обратное действие, предыдущий фрагмент идет слева направо. Но это должно быть правильно, и я не знаю, как это сделать.

например: -

Когда я нажимаю на кнопку в SecondFragment1, FirstFragment1 должен прийти справа налево на viewpager. Но в настоящее время это происходит слева направо.

Как я мог достичь этого? Должен ли я использовать анимацию?

Есть идеи? Спасибо.

ответ

1

Я предлагаю вам установить пользовательские переходы:

ввести справа:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
    android:fromXDelta="100%" android:toXDelta="0%" 
    android:fromYDelta="0%" android:toYDelta="0%" 
    android:duration="500" /> 
</set> 

выход налево:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="0%" android:toXDelta="-100%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500"/> 
</set> 

введите слева:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="-100%" android:toXDelta="0%" 
     android:fromYDelta="0%" android:toYDelta="0%" 
     android:duration="500"/> 
</set> 

выход вправо:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
    android:fromXDelta="0%" android:toXDelta="100%" 
    android:fromYDelta="0%" android:toYDelta="0%" 
    android:duration="500" /> 
</set> 

, а затем вы можете установить переходы таким образом:

fragmentTransaction.setCustomAnimations(R.anim.from_right, R.anim.to_left); 

Надеется, что это помогает!

+0

Дорогой, это поможет мне решить некоторые части моей проблемы. Но когда я использую этот код, я столкнулся с какими-то проблемами. Во-первых, я не могу загрузить FirstFragment, когда нажимаю кнопку в SecondFragment. – Barrier

+0

скажите, если я могу попытаться помочь вам –

+0

в процессе разворота, это работает для меня. – Barrier

Смежные вопросы