Come si ottiene il numero di pagina corrente di un ViewPager per Android?


84

Voglio conoscere la posizione corrente della pagina del file ViewPager. Creo un adattatore e lo imposto su ViewPager. Ora voglio conoscere il numero di pagina corrente o la posizione della vista corrente, perché voglio iniziare alcuni eventi extra su quella particolare pagina.

Ho usato viewPager.setCurrentItem(1);per impostare il primo elemento.

Esiste un metodo simile per ottenere la pagina corrente?

Risposte:


180

negli ultimi pacchetti puoi anche usare

vp.getCurrentItem()

o

vp è il viewPager,

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

devi mettere un listener di cambio pagina per il tuo viewPager. Non esiste alcun metodo su viewPager per ottenere la pagina corrente.

private int currentPage;

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

Grazie mille amico .. funziona .. Hai già lavorato su ViewPager?
sam_k

@Necronet no, non dovrebbe. La classe PageListener dovrebbe essere una classe interna, non una classe annidata.
dcow

A volte ho ricevuto un'eccezione del puntatore nullo all'inizio delle immagini del pager, per soluzioni più affidabili suggerisco questo, funziona bene per me. stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()è deprecato, usa addOnPageChangeListener()invece.
ZzZombo

47

Esiste un metodo object_of_ViewPager.getCurrentItem()che restituisce la posizione della pagina attualmente visualizzata del cercapersone di visualizzazione


In realtà ho pubblicato questa risposta per prima @ChuckBoris, ma questa sembra aver raccolto più voti e apparentemente un'approvazione. Strani sono i modi di questo sito :)
devanshu_kaushik

17

Se vuoi solo la posizione, te vp.getCurrentItem()la darò, non c'è bisogno di applicare onPageChangeListener () solo per quello scopo.


8

Scoprirai che setOnPageChangeListener è deprecato, usa addOnPageChangeListener, come di seguito:

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

Per questo problema l'ascoltatore di Onpagechange è il migliore Ma avrà anche un piccolo errore cheènon rileverà l'ora di inizio ora della posizione 0 Una volta che cambierai la pagina inizierà a rilevare la posizione selezionata della pagina ... Per questo problema trovo la soluzione più semplice

1.Devi mantenere il valore di posizione selezionato, quindi usarlo ....
2. Caso 1: All'inizio della posizione è sempre Zero ....
Caso 2: Supponiamo che se imposti l'elemento corrente significa che lo imposterai valore nella posizione di mantenimento
3.Poi fai la tua azione con l'uso di quel mantenimento nella tua attività ...

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 è deprecato. Usa addOnPageChangeListener invece di setOnPageChangeListener.
Selin

6

getCurrentItem(), in realtà non dà la giusta posizione per la prima e l'ultima pagina l'ho corretto aggiungendo questo codice:

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

Non esiste alcun metodo getCurrentItem () in viewpager.i già controllato l'API


3
Devi aggiornare il pacchetto di compatibilità in Android SDK Manager, quindi solo tu ottieni quel metodo.
krisDrOid

5

Il metodo setOnPageChangeListener () è deprecato. Utilizza invece addOnPageChangeListener (OnPageChangeListener) .

Puoi usare OnPageChangeListener e ottenere la posizione all'interno del onPageSelected()metodo, questo è un esempio:

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

        }
    });

Oppure usa semplicemente getCurrentItem () per ottenere la posizione reale:

viewPager.getCurrentItem();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.