2011-11-14 8 views
66

Desidero conoscere la posizione attuale della pagina di ViewPager. Creo un adattatore e configuro questo adattatore allo ViewPager. Ora voglio sapere il numero di pagina corrente o la posizione della vista corrente, perché voglio iniziare alcuni eventi extra su quella particolare pagina.Come si ottiene il numero di pagina corrente di un ViewPager per Android?

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

Esiste un metodo simile per ottenere la pagina corrente?

risposta

140

negli ultimi pacchetti è possibile utilizzare anche

vp.getCurrentItem() 

o

vp è il viewPager,

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

devi mettere una pagina cambiamento listener per il tuo viewPager. Non c'è 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; 
     } 
    } 
+0

Grazie un sacco di uomini ... funziona ... Hai mai lavorato su ViewPager? –

+0

solo un pensiero currentPage dovrebbe essere statico ... – Necronet

+0

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

10

Se si desidera solo la posizione, vp.getCurrentItem() darà a voi, non c'è bisogno di applicare l'onPageChangeListener() solo per questo scopo.

3

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

+3

Devi aggiornare il pacchetto di compatibilità in Android SDK Manager, quindi ottieni il metodo. – krisDrOid

+0

Funziona con l'API v7? – melanke

43

C'è un metodo object_of_ViewPager.getCurrentItem() che restituisce la posizione della pagina attualmente visualizzato di vista cercapersone

+6

questa dovrebbe essere la risposta accettata –

+0

In realtà ho postato questa risposta per prima @ChuckBoris, tuttavia questo sembra aver raccolto più voti e apparentemente un'approvazione. Strane sono le modalità di questo sito :) –

4

getCurrentItem(), non effettivamente dare la giusta posizione per la prima e l'ultima pagina ho riparato 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

per questo problema Onpagechange ascoltatore è il migliore, ma avrà anche un piccolo errore che è non lo farà d etificare l'ora di inizio della posizione 0. Una volta modificata la pagina inizierà a rilevare la posizione selezionata della pagina ... Per questo problema, la soluzione più semplice

1.Si deve mantenere il valore di posizione selezionato quindi usalo ....
2. Caso 1: All'inizio della posizione è sempre Zero ....
Caso 2: Supponiamo che se si imposta la voce corrente si intende che imposterà quel valore nella posizione di mantenimento
3 .Quindi fai la tua azione con l'uso di quello mantenere nella vostra 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. Utilizzare addOnPageChangeListener anziché setOnPageChangeListener. – Selin

4

Potrai capire che setOnPageChangeListener è deprecato, usare 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) { 

    } 
}); 
2

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

È possibile utilizzare OnPageChangeListener e ottenere la posizione all'interno 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) { 

     } 
    }); 

o semplicemente usare getCurrentItem() per ottenere la posizione reale:

viewPager.getCurrentItem(); 
Problemi correlati