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?

sam_k
quelle

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;
        }
    }
Yashwanth Kumar
quelle
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

Krishna Shrestha
quelle
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.

devanshu_kaushik
quelle
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) {

    }
});
Geraldo Neto
quelle
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();
        }
    });
Naveen Kumar
quelle
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;
}
Da-Mönch
quelle
5

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

Raman
quelle
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();
Jorgesys
quelle