web-dev-qa-db-fra.com

Définir la page par défaut pour ViewPager dans Android

J'utilise le code suivant, MAX fait 2 pages. Par défaut, la position est 0 et ajoute une nouvelle page à droite. Je gonfle deux fichiers de mise en page.

Comment afficher la page1 au démarrage de l'application et ajouter une nouvelle page à gauche? Merci.

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">


    <Android.support.v4.view.ViewPager
        Android:layout_width="wrap_content" Android:layout_height="wrap_content"
        Android:id="@+id/pagerView" />


</LinearLayout>

code Java

public class MyPagerActivity extends Activity {
    private Context context;    
    private int pageNumber;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        context = this;

        ViewPager pagerView = (ViewPager)findViewById(R.id.pagerView);
        pagerView.setAdapter(new AwesomePagerAdapter());    

    }


    private class AwesomePagerAdapter extends PagerAdapter{

        @Override
        public void destroyItem(View collection, int position, Object view) {
            ((ViewPager) collection).removeView((View)view);            
        }

        @Override
        public void finishUpdate(View arg0) {
            //setPageTitles(getPageNumber());
        }

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

        @Override
        public Object instantiateItem(View collection, int position) {
            /*  TextView tv = new TextView(MyPagerActivity.this);
        tv.setText("Bonjour PAUG " + position);
        tv.setTextColor(Color.WHITE);
        tv.setTextSize(30);

        ((ViewPager) collection).addView(tv,0);

        return tv;*/

            View view = getViewToShow(position);
            ((ViewPager) collection).addView(view,0);
            return view;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==((View)object);
        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public Parcelable saveState() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void startUpdate(View arg0) {
            // TODO Auto-generated method stub

        }

    }


    private View getViewToShow(int position){
        View view = null;
        View layout; 
        LayoutInflater mInflater =  (LayoutInflater)
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        switch(position){

        case 0: 
            layout  = mInflater.inflate(R.layout.elements, null);
            view = layout;
            break;
        case 1: view = 
            layout  = mInflater.inflate(R.layout.elements2, null);
        view = layout;

        break;
        }
        return view;
    }

}
63
dcanh121

Avez-vous essayé d'utiliser la méthode setCurrentItem?

120
Cristian

La solution acceptée est correcte, mais il est important d'appeler cette méthode après avoir configuré l'adaptateur.

    viewPager.setAdapter(adapterViewPager);
    viewPager.setCurrentItem(1);
51
Anor

Par défaut, vous devez définir la valeur actuelle 1 pour afficher la seule vue par défaut. Si vous ne définissez pas setCurrentItem sur 1, vous ne pouvez rien voir.

viewPager.setAdapter(adapterViewPager);
viewPager.setCurrentItem(1)
6
Farruh Habibullaev

Vous devez définir la page uniquement lors de la première initialisation du fragment. Plus tard, il restaurera une position sélectionnée par l'utilisateur à partir d'un "état d'instance enregistré". Cela semble donc un peu mieux:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    pager.adapter = AwesomePagerAdapter()
    if (savedInstanceState == null) {
        pager.currentItem = 1
    }
}
0
tse