Legen Sie die Standardseite für ViewPager in Android fest

Lesezeit: 3 Minuten

Benutzer-Avatar
dcanh121

Ich verwende den folgenden Code, MAX ist 2 Seiten. Standardmäßig ist die Position 0 und fügt rechts eine neue Seite hinzu. Ich blase zwei Layout-Dateien auf.

Wie kann ich die Seite 1 anzeigen, wenn die App gestartet wird, und links eine neue Seite hinzufügen? Vielen Dank.

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>

Java-Code

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;
    }

}

Haben Sie versucht, die zu verwenden setCurrentItem Methode?

  • Wie erhalte ich ein Ereignis zum Laden des Viewpagers?

    – Nitin Karale

    7. März 2019 um 16:52 Uhr

Benutzer-Avatar
Anor

Die akzeptierte Lösung ist in Ordnung, aber es ist wichtig, diese Methode nach dem Einrichten des Adapters aufzurufen.

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

Benutzer-Avatar
Farruh Habibullaev

Standardmäßig müssen Sie den aktuellen Wert 1 einstellen, um nur eine Standardansicht anzuzeigen. Wenn Sie nicht festlegen setCurrentItem bis 1 sieht man nichts.

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

Benutzer-Avatar
Jan

Diese Lösung bietet die Möglichkeit, die Standardseite ohne Eingriff von außerhalb der Pager-Adapterklasse festzulegen.

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View currentPage = null;
    switch(position){
        case 0:
            currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null)    
            break;
        case 1:
            currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null)    
            ///////////// This page will be default ////////////////////
            ((ViewPager)container).setCurrentItem(position);
            ////////////////////////////////////////////////////////////
            break;
        case 2:
            currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null)    
            break;
    return currentPage;
}

Sie müssen die Seite nur während der ersten Initialisierung des Fragments festlegen. Später wird es eine vom Benutzer ausgewählte Position aus einem “gespeicherten Instanzzustand” wiederherstellen. Also das sieht etwas besser aus:

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

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

1235140cookie-checkLegen Sie die Standardseite für ViewPager in Android fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy