2012-07-25 11 views
5

Cosa succede: le prime due pagine ViewPager sono state caricate correttamente (ViewPager carica automaticamente + -1 dalla pagina corrente). Quando scorri questi passaggi, le prossime pagine non vengono visualizzate. Demo GIF del problema qui sotto.ViewPager + PagerAdapter mostra pagine vuote dopo i primi due elementi

informazioni di debug: Le pagine sono essere istanziati (vedi codice qui sotto) e vengono aggiunti con successo alla ViewPager ArrayList<ItemInfo>mItems (confermato tramite messaggi di log). Ho ricompilato la biblioteca android.support.v4 con il debug = true set (mmm frameworks/support/v4/ in AOSP) e si vede tutto perfettamente funzionante TRANNE:

I metodi onLayout e onMeasure in ViewPager smettere di essere chiamato dopo che i primi due punti di vista sono stati caricati. Ciò significa che le altre pagine sono nere perché non sono mai state misurate & disposte come avrebbero dovuto essere. Ho provato ad aggiungere diverse chiamate requestLayout() in punti diversi per forzare un aggiornamento dell'albero di layout senza alcun risultato.

Sfondo: Ho un ViewPager istanziato tramite inflater.inflate e trovato tramite view.findViewById (R.layouy.myid). E 'sostituire direttamente un vecchio vista galleria, e per scopi di test del PagerAdapter instantiateItem (raccolta, posizione) fa semplicemente questo:

@Override 
public Object instantiateItem(View collection, final int position) { 
    final TextView tv = new TextView(collection.getContext()); 
    tv.setText("Looking at page " + position); 
    tv.setTextColor(Color.WHITE); 
    tv.setBackgroundColor(Color.rgb((int)(Math.random()*100), (int)(Math.random()*100), (int)(Math.random()*100))); 
    tv.setTextSize(22); 
    ((ViewPager) collection).addView(tv); 
    return tv; 
} 

Tutte le idee? Mi sembra che alcune impostazioni misteriose nei genitori di PageView stiano in qualche modo disabilitando onLayout PageView

+1

[GIF Demo del problema (imgur)] (http://i.stack.imgur.com/YPsJr.gif) –

+0

hai implementato 'destroyItem' nell'adattatore? http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#destroyItem(android.view.ViewGroup, int, java.lang.Object) –

+0

Sì, esattamente come consigliato: 'destroyItem (Visualizza c, int p, Object v) {((ViewPager) c) .removeView ((View) v); } 'e funziona perfettamente nella mia app di test. –

risposta

9

Trovato il mio problema. Nel genitore del genitore del mio punto di vista qualcuno ha sottocloppato LinearLayout e ha annullato requestLayout() senza chiamare super.requestLayout().

Questo ha annullato l'aggiornamento della gerarchia della vista e impedito l'attivazione di OnMeasure e onLayout sul mio ViewPager. Senza misurare e disporre le pagine si sono presentate vuote in ViewPager.

Spero che questo aiuti qualcun altro un giorno. Di sicuro mi ci è voluto un giorno per capire.

PRO TIP: android-sdk/tools/hierarchyviewer è incredibili. Grazie squadra di Android. Tutti dovrebbero eseguirlo almeno una volta, può essere prezioso nel debugging e nella progettazione di qualsiasi interfaccia utente.

+0

non è un monitor deprecato ora? –

+0

La versione da riga di comando è, ma non la versione di Android Device Monitor. – Neeeko

Problemi correlati