2012-07-25 7 views
5

क्या हो रहा है: पहले दो व्यू पेजर पेज अच्छी तरह से लोड हो गए हैं (ViewPager स्वचालित रूप से वर्तमान पृष्ठ से + -1 लोड करता है)। जब आप इन्हें पीछे स्क्रॉल करते हैं तो अगले पृष्ठ दिखाई नहीं दे रहे हैं। नीचे की समस्या का जीआईएफ डेमो।ViewPager + PagerAdapter पहले दो आइटमों के बाद रिक्त पृष्ठ दिखाता है

डीबग जानकारी: पृष्ठों हैं instantiated जा रहा है (नीचे दिए गए कोड को देखें) और सफलतापूर्वक ViewPager ArrayList<ItemInfo>mItems (लॉग संदेश के माध्यम से इस बात की पुष्टि) से जुड़ जाते हैं। मैं डिबग = true सेट (AOSP में mmm frameworks/support/v4/) के साथ android.support.v4 पुस्तकालय कंपाइल और यह सब कुछ छोड़कर पूरी तरह से काम कर दिखाता है:

ViewPager में onLayout और onMeasure तरीकों के बाद पहले दो विचारों लोड किए गए हैं बुलाया जा रहा है बंद करो। इसका मतलब है कि अन्य पृष्ठ काले हैं क्योंकि उन्हें कभी भी & को मापने के लिए व्यवस्थित नहीं किया गया था जैसा कि उन्हें होना चाहिए था। मैंने अलग-अलग बिंदुओं पर अलग-अलग अनुरोध Layout() कॉल जोड़ने का प्रयास किया ताकि कोई लेआउट ट्री रीफ्रेश न हो सके।

पृष्ठभूमि: मेरे पास inflater.inflate के माध्यम से एक ViewPager तत्काल है और view.findViewById (R.layouy.myid) के माध्यम से पाया गया है। यह सीधे एक पुराने गैलरी दृश्य की जगह है, और परीक्षण प्रयोजनों के लिए PagerAdapter instantiateItem (संग्रह, स्थिति) बस इस करता है:

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

कोई भी विचार? मुझे लगता है कि पेजव्यू के माता-पिता में कुछ रहस्य सेटिंग किसी भी तरह से अक्षम हो रही है, पेजआउट

+1

[समस्या का जीआईएफ डेमो (imgur)] (http://i.stack.imgur.com/YPsJr.gif) –

+0

क्या आपने अपने एडाप्टर में 'destroyItem' लागू किया था? http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#destroyItem(android.view.ViewGroup, int, java.lang.Object) –

+0

हां, जैसा कि अनुशंसित है: 'नष्ट करें Item (देखें सी, int पी, ऑब्जेक्ट v) {((ViewPager) सी) .removeView ((देखें) v); } 'और यह मेरे परीक्षण ऐप में पूरी तरह से काम करता है। –

उत्तर

9

मेरी समस्या मिली। मेरे विचार के माता-पिता के माता-पिता में LinearLayout उप-वर्गीकृत किया गया और super.requestLayout() पर कॉल किए बिना requestLayout() ओवरराइड किया गया।

इसने मेरे दृश्य पदानुक्रम के ताज़ा करने को तोड़ दिया और मेरे व्यूपेजर पर कॉल करने के लिए मेजर और ऑनआउट पर रोक लगा दी। पेजों को मापने और बिछाने के बिना वे ViewPager में खाली के रूप में दिखाई देते हैं।

आशा है कि यह किसी और को किसी और की मदद करेगा। यह निश्चित रूप से मुझे हमेशा पता लगाने के लिए ले लिया।

प्रो टिप: Android-SDK/उपकरण/hierarchyviewerअविश्वसनीय है। धन्यवाद एंड्रॉइड टीम। हर किसी को इसे कम से कम एक बार चलाना चाहिए, यह किसी भी यूआई को डीबग करने और डिजाइन करने में अमूल्य हो सकता है।

+0

अब मॉनिटर नहीं किया गया है? –

+0

कमांड लाइन संस्करण है, लेकिन एंड्रॉइड डिवाइस मॉनिटर का संस्करण नहीं है। – Neeeko

संबंधित मुद्दे