Wie erhält man die aktuelle Seitenzahl eines ViewPager für Android?


84

Ich möchte die aktuelle Seitenposition der kennen ViewPager. Ich erstelle einen Adapter und setze diesen Adapter auf ViewPager. Jetzt möchte ich die aktuelle Seitenzahl oder Position der aktuellen Ansicht kennen, da ich einige zusätzliche Ereignisse auf dieser bestimmten Seite starten möchte.

Ich habe viewPager.setCurrentItem(1);zum Einstellen des ersten Elements verwendet.

Gibt es eine ähnliche Methode, um die aktuelle Seite abzurufen?

Antworten:


177

In den neuesten Paketen können Sie auch verwenden

vp.getCurrentItem()

oder

vp ist der viewPager,

pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);

Sie müssen einen Listener für Seitenwechsel für Ihren viewPager einrichten. In viewPager gibt es keine Methode, um die aktuelle Seite abzurufen.

private int currentPage;

    private static class PageListener extends SimpleOnPageChangeListener{
            public void onPageSelected(int position) {
                Log.i(TAG, "page selected " + position);
                   currentPage = position;
        }
    }

Vielen Dank Mann ... es funktioniert ... Haben Sie schon einmal an ViewPager gearbeitet?
Sam_k

@Necronet nein, sollte es nicht. Die PageListener-Klasse sollte eine innere Klasse sein, keine verschachtelte Klasse.
dcow

Ich habe manchmal zu Beginn der Pager-Bilder eine Nullzeiger-Ausnahme erhalten. Für zuverlässigere Lösungen schlage ich vor, dass dies für mich gut funktioniert. stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()ist veraltet, verwenden Sie addOnPageChangeListener()stattdessen.
ZzZombo

47

Es gibt eine Methode, object_of_ViewPager.getCurrentItem()die die Position der aktuell angezeigten Seite des Ansichtspagers zurückgibt


Ich habe diese Antwort tatsächlich zuerst @ChuckBoris gepostet, dennoch scheint diese mehr Stimmen und anscheinend eine Bestätigung gesammelt zu haben. Seltsam sind die Wege dieser Seite :)
devanshu_kaushik

17

Wenn Sie nur die Position möchten, die vp.getCurrentItem()Sie erhalten, müssen Sie den onPageChangeListener () nicht nur für diesen Zweck anwenden.


8

Sie werden feststellen, dass setOnPageChangeListener veraltet ist. Verwenden Sie addOnPageChangeListener wie folgt:

ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
       if(position == 1){  // if you want the second page, for example
           //Your code here
       }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

7

Für dieses Problem ist der Onpagechange-Listener der beste. Er hat jedoch auch einen kleinen Fehler: Er erkennt die Startzeit der 0. Position nicht. Sobald Sie die Seite wechseln, erkennt er die ausgewählte Seite ... Hierfür Problem Ich finde die einfachste Lösung

1. Sie müssen den ausgewählten Positionswert beibehalten und dann verwenden ....
2. Fall 1: Zu Beginn der Position ist immer Null ....
Fall 2: Angenommen, wenn Sie das aktuelle Element festlegen, bedeutet dies, dass Sie dies festlegen Wert in Position halten
3. Dann tun Sie Ihre Aktion mit der Verwendung dieser in Ihrer Aktivität beibehalten ...

Public int maintain=0;
myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
             //Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageSelected( int i) {
          // here you will get the position of selected page
            maintain = i;


        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });


updateButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
            data.set(maintain, "Replaced "+maintain);         
            myViewPager.getAdapter().notifyDataSetChanged();
        }
    });

1
setOnPageChangeListener ist veraltet. Verwenden Sie addOnPageChangeListener anstelle von setOnPageChangeListener.
Selin

6

getCurrentItem(), gibt nicht wirklich die richtige Position für die erste und die letzte Seite an Ich habe es korrigiert und diesen Code hinzugefügt:

public void CalcPostion() {    
    current = viewPager.getCurrentItem();

    if ((last == current) && (current != 1) && (current != 0)) {
        current = current + 1;
        viewPager.setCurrentItem(current);
    }
    if ((last == 1) && (current == 1)) {
        last = 0;
        current = 0;
    }
    display();
    last = current;
}

5

Es gibt keine Methode getCurrentItem () in viewpager.i, die die API bereits überprüft hat


3
Sie müssen das Kompatibilitätspaket im Android SDK Manager aktualisieren, dann erhalten nur Sie diese Methode.
krisDrOid

5

Die Methode setOnPageChangeListener () ist veraltet. Verwenden Sie stattdessen addOnPageChangeListener (OnPageChangeListener) .

Sie können OnPageChangeListener verwenden und die Position innerhalb der onPageSelected()Methode abrufen. Dies ist ein Beispiel:

   viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            Log.d(TAG, "my position is : " + position); 
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

Oder verwenden Sie einfach getCurrentItem () , um die tatsächliche Position zu ermitteln:

viewPager.getCurrentItem();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.