2016-06-23 5 views
3

Ich erstelle eine Android App mit viewpager und fragment s. Ich benutze zwei Knöpfe an einem Fragment, um vorwärts und rückwärts zu gehen. Wenn ich die Vorwärtsaktion verwende, kommt das nächste Fragment von rechts nach links. Es bedeutet, dass sich bei dieser Aktion Fragmente von rechts nach links verändern.Wie bekomme ich das vorherige Fragment von rechts nach links auf einem Viewpager in Android

Hier sind meine Arbeitscode,

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

Wenn ich die Rückwärtsaktion verwende, kommt das vorherige Fragment von links nach rechts. Aber es sollte von rechts nach links sein und ich habe keine Ahnung, wie es geht.

zB: -

Wenn ich auf die Schaltfläche in SecondFragment1, FirstFragment1 von rechts kommen sollte auf der viewpager nach links. Aber momentan kommt es von links nach rechts.

Wie konnte ich das erreichen? Soll ich eine Animation verwenden?

Haben Sie irgendwelche Ideen? Vielen Dank.

Antwort

1

Ich schlage vor, Sie Ihre individuellen Übergänge einstellen:

eingeben von rechts:

<?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> 

Ausfahrt nach links:

<?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> 

von links eingeben:

<?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> 

Ausfahrt nach rechts:

<?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> 

und dann können Sie die Übergänge auf diese Weise festgelegt:

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

Hope this Sie hilft!

+0

Lieber, das hilft mir, einige Teile meines Problems zu lösen. Aber als ich diesen Code benutzte, hatte ich einige Probleme. Erstens kann ich FirstFragment nicht laden, wenn ich auf den Button in SecondFragment klicke. – Barrier

+0

sagen Sie mir, wenn ich kann ich versuchen, Ihnen –

+0

im Schiebeprozess zu helfen, das funktioniert für mich. – Barrier

Verwandte Themen