2012-09-12 15 views
8

मेरे पास निम्न एडाप्टर का उपयोग करके व्यूअरजर है और इसे लोड करने के बाद पहला दृश्य खाली दिखाई देता है लेकिन ऐसा नहीं है। अगर मैं अगले दृश्य पर स्क्रॉल करता हूं और फिर वापस स्क्रॉल करता हूं तो मैं सामग्री देख सकता हूं।व्यूपेजर में पहला दृश्य खाली क्यों दिख रहा है?

import android.content.Context; 
import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class MyPagerAdapter extends PagerAdapter { 

    Context context; 

    public ArrayList<TextView> mViews; 

    int layoutResourceId; 

    public MyPagerAdapter(Context context) { 
     mViews = new ArrayList<TextView>(); 

    } 

    @Override 
    public void destroyItem(View view, int arg1, Object object) { 
     ((ViewPager)view).removeView((View)object); 
    } 

    @Override 
    public void finishUpdate(View arg0) { 

    } 

    @Override 
    public int getCount() { 
     return mViews.size(); 
    } 

    @Override 
    public Object instantiateItem(View view, int position) { 
     View myView = mViews.get(position); 
     ((ViewPager)view).addView(myView); 
     return myView; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1) { 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

    @Override 
    public void startUpdate(View arg0) { 

    } 

    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 

} 

और यहाँ कोड है कि यह मेरी गतिविधि से लागू करता है ...

public void resetPages() { 
    if (mPageText == null) 
     return; 
    mPagerAdapter.mViews.clear(); 
    for (int i = 0; i < mPageText.size(); i++) { 
     TextView tv = new TextView(this); 
     tv.setTextSize(mSelectedFontSize); 
     tv.setText(mPageText.get(i)); 
     tv.setId(i); 
     tv.setTag(i); 
     tv.invalidate(); 
     mPagerAdapter.mViews.add(tv); 
    } 

mPagerAdapter.notifyDataSetChanged(); 
mViewPager.refreshDrawableState(); 
} 
+0

'mResizeTextView' क्या है? –

+0

mResizeTextView एक कस्टम टेक्स्टव्यू है जो गणना के लिए उपयोग किया जाता है कि दिए गए स्थान में कितना टेक्स्ट फिट होगा। मेरे पास एक लंबी स्ट्रिंग है जिसे मुझे एकाधिक पृष्ठों में प्रदर्शित करने की आवश्यकता है। यह वर्तमान में केवल डिबगिंग puposes के लिए दृश्यमान है। – Josh

+0

मैंने उपरोक्त कोड से mResizeTextView लाइन को हटा दिया है। यह देखने की दृश्यता को बदलने के लिए यह अनिवार्य नहीं है .. फिर भी एक ही समस्या है। – Josh

उत्तर

0

followind onCreate विधि जोड़ने की कोशिश की और मेरी कोड काम करता है ("पाठ 0" लांच में दिखाई दिया है)। शायद यह केवल इसलिए क्योंकि रीसेटपेज() को अप्रासंगिक समय पर बुलाया जाता है?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mPageText = new LinkedList<CharSequence>(); 
    for (int i=0; i<10; i++) { 
     mPageText.add("TEXT "+i); 
    } 
    this.mPagerAdapter = new MyPagerAdapter(this); 
    this.mViewPager = (ViewPager)this.findViewById(R.id.viewpager); 
    this.mViewPager.setAdapter(mPagerAdapter); 
    resetPages(); 
} 
0

मैं इस बारे में निश्चित नहीं हूँ, लेकिन अगर आप instantiateItem में अपने दृश्य के लिए ViewGroup का उपयोग तो यह मैं viewgroup और उसके काम कर ठीक इस्तेमाल किया काम हो सकता है।

@Override 
public Object instantiateItem(View view, int position) { 
    View myView = mViews.get(position); 
    ((ViewPager)view).addView(myView); 
    return myView; 
} 

आशा मेरा उत्तर में मदद करता है ..

0

मुद्दा होना चाहिए, क्योंकि दृश्य सामग्री और दृश्य लोड करने में समय लग रहा है अद्यतन नहीं है सामग्री के बाद किया जा रहा है loaded.Try

handler.postDelayed(r=new Runnable() 
     { 
      @Override 
      public void run() { 
       if (mPosition == position) 
       { 

        notifyDataSetChanged(); 
        handler.removeCallbacks(r); 


       } 
      } 
     }, 1000); 

अंदर जोड़ने है एडाप्टर के instantiateItem ताकि दृश्य बनने पर 1 सेकंड के बाद दृश्य अपडेट किया जा सके। mPosition पहले दृश्य का पोस्ट है जिसे खोला जा रहा है। अगर आप सूची में आइटम पर क्लिक करके व्यूपेजर खोल रहे हैं तो आपको एडाप्टर को कॉल करते समय चुने गए आइटम का पोस्ट पास करना होगा .. आप mPostion को 0 के रूप में सेट कर सकते हैं यदि पहली वस्तु को हमेशा प्रारंभ में देखा गया है

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