Android Utilisation de base de ViewPager avec des fragments


Exemple

Un ViewPager permet d'afficher plusieurs fragments dans une activité qui peut être parcourue en basculant à gauche ou à droite. Un ViewPager doit être alimenté par Views ou Fragments à l'aide d'un PagerAdapter .

Il existe cependant deux implémentations plus spécifiques que vous trouverez plus utiles dans le cas de l'utilisation de Fragments, à savoir FragmentPagerAdapter et FragmentStatePagerAdapter . Lorsqu'un fragment doit être instancié pour la première fois, getItem(position) sera appelé pour chaque position nécessitant une instanciation. La méthode getCount() renvoie le nombre total de pages afin que ViewPager sache combien de fragments doivent être affichés.

FragmentPagerAdapter et FragmentStatePagerAdapter conservent tous deux un cache des fragments que ViewPager devra afficher. Par défaut, ViewPager essaiera de stocker un maximum de 3 fragments correspondant au fragment actuellement visible, et ceux situés à droite et à gauche. Aussi FragmentStatePagerAdapter gardera l'état de chacun de vos fragments.

Sachez que les deux implémentations supposent que vos fragments conserveront leurs positions, donc si vous conservez une liste des fragments au lieu d'en avoir un nombre statique comme vous pouvez le voir dans la méthode getItem() , vous devrez créer une sous-classe de PagerAdapter et remplacer au moins instantiateItem() , destroyItem() et getItemPosition() méthodes.

Ajoutez simplement un ViewPager dans votre mise en page comme décrit dans l' exemple de base :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout> 
    <android.support.v4.view.ViewPager
        android:id="@+id/vpPager"> 
    </android.support.v4.view.ViewPager>
</LinearLayout>

Définissez ensuite l'adaptateur qui déterminera le nombre de pages existantes et le fragment à afficher pour chaque page de l'adaptateur.

public class MyViewPagerActivity extends AppCompatActivity {
    private static final String TAG = MyViewPagerActivity.class.getName();

    private MyPagerAdapter mFragmentAdapter;
    private ViewPager mViewPager;

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

        //Apply the Adapter
        mFragmentAdapter = new MyPagerAdapter(getSupportFragmentManager());    
        mViewPager = (ViewPager) findViewById(R.id.view_pager);
        mViewPager.setAdapter(mFragmentAdapter);
    }

    private class MyPagerAdapter extends FragmentPagerAdapter{

        public MyPagerAdapter(FragmentManager supportFragmentManager) {
            super(supportFragmentManager);
        }

        // Returns the fragment to display for that page
        @Override
        public Fragment getItem(int position) {
            switch(position) {
                case 0:
                    return new Fragment1();

                case 1:
                    return new Fragment2();

                case 2:
                    return new Fragment3();

                default:
                    return null;
            }
        }

        // Returns total number of pages    
        @Override
        public int getCount() {
            return 3;
        }

    }
}
3.2.x

Si vous utilisez android.app.Fragment vous devez ajouter cette dépendance:

compile 'com.android.support:support-v13:25.3.1'

Si vous utilisez android.support.v4.app.Fragment vous devez ajouter cette dépendance:

compile 'com.android.support:support-fragment:25.3.1'