2012-07-25 17 views
5

Neler oluyor: İlk iki ViewPager sayfası güzel şekilde yüklendi (ViewPager otomatik olarak geçerli sayfadan + -1 yükler). Bunları geçtiğinizde, sonraki sayfalar gösterilmez. Aşağıdaki sorunun GIF demo.ViewPager + PagerAdapter, ilk iki öğeden sonra boş sayfaları gösterir

ayıklama bilgileri: olan örneğinin oluşturulmasını sayfalar (aşağıdaki kodu bakınız) başarıyla (Log mesajları ile teyit) ViewPager ArrayList<ItemInfo>mItems eklenir. Ben ayıklama = true sette (AOSP içinde mmm frameworks/support/v4/) ile android.support.v4 kütüphane recompiled ve HARİÇ mükemmel çalışıyor her şeyi gösterir: ViewPager içinde

onLayout ve onMeasure yöntemleri ilk iki görüş yüklendikten sonra çağrılan durdurun. Bu, diğer sayfaların siyah olduğu anlamına gelir, çünkü asla olmaması gerektiği gibi ayarlanmış & ölçülmemiştir. Bir düzen ağacı yenilemesini boşuna zorlamak için farklı noktalara farklı requestLayout() çağrıları eklemeyi denedim.

Arka plan: Inflater.inflate aracılığıyla oluşturulan bir ViewPager'ım var ve view.findViewById (R.layouy.myid) aracılığıyla bulundu. Doğrudan eski Galeri görünümü yerine gelen ve test amaçlı PagerAdapter instantiateItem (toplama, pozisyon) basitçe yapar:

@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; 
} 

Herhangi bir fikir? PageView'ın ebeveynlerinde bazı gizem ayarlarının bir şekilde devre dışı bırakılması gibi görünüyor. Page 11

+1

[GIF sorunundan kaçınılması (imgur)] (http://i.stack.imgur.com/YPsJr.gif) –

+0

Bağdaştırıcınızda 'destroyItem 'uyguladınız mı? http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#destroyItem(android.view.ViewGroup, int, java.lang.Object) –

+0

Evet, tam olarak önerildiği gibi: 'destroyItem (Görünüm c, int p, Nesne v) {((ViewPager) c) .removeView ((Görünüm) v); } 've benim test uygulamasında mükemmel çalışıyor. –

cevap

9

Sorunumu çözdüm. Benim görüşümün ebeveyninin ebeveyninde birisi LinearLayout'un alt sınıflarını altlandı ve super.requestLayout()'u arayarak requestLayout()'u aştı.

Bu, görünüm hiyerarşisinin yenilenmesini kırdı ve Önlemeden ve Görüntülemeden ayrılma özelliğini ViewPager'ımda aranmamasına engel oldu. Sayfaları ölçmek ve sermeksizin, ViewPager'da boş olarak gösterdiler. Bu bir başkasının bir gün dışarıda olmasına yardımcı olmasını umuyorum. Anladığım kadarıyla beni sonsuza dek götürdü.

PRO İPUCU: android-sdk/tools/hierarchyviewerinanılmaz olduğunu. Teşekkürler Android ekibi. Herkes en az bir kez çalıştırmalı, hata ayıklamada ve herhangi bir UI tasarımında çok değerli olabilir.

+0

şu an kullanımdan kaldırıldı değil mi? –

+0

Komut satırı sürümü, ancak Android Device Monitor sürümü değil. – Neeeko

İlgili konular