2013-08-08 6 views
6

क्या ViewPager का उपयोग टुकड़ों के बिना करना संभव है? सभी उदाहरण मैं ViewPager में कई टुकड़े लोड कर सकते हैं।टुकड़े के बिना पृष्ठ एडाप्टर का उपयोग

मैं इसे ListView के समान उपयोग करना चाहता हूं। मैं एक कस्टम एडाप्टर बनाना चाहता हूं जो पेजर की स्थिति के अनुसार एक लेआउट को बढ़ाएगा।

यदि संभव हो तो क्या कोई मुझे इसके लिए एक उदाहरण के लिए इंगित कर सकता है?

उत्तर

7

हाँ यह पूरी तरह से संभव है। चूंकि ViewPager.setAdapter() कोई उदाहरण PageAdapter लेता है, तो आपको केवल पेजरएडाप्टर का अपना उप-वर्ग बनाना होगा (इसकी तरह सबक्सासिंग बेसएडाप्टर या ऐरेएडाप्टर जो आप ListView में उपयोग करते हैं)। बस याद है, PAgerAdapter के लिये दस्तावेज कहते हैं:

आशा इस मदद करता है

11

मैं इसी तरह की समस्या थी और यह मेरे लिए कुछ समय ले लिया यह पता लगाने की। भविष्य में संदर्भ के लिए यहां मेरे एडाप्टर पोस्ट करना।

/** 
* A page adapter which works with a large data set by reusing views. 
*/ 
public abstract class ListPageAdapter<T> extends PagerAdapter { 

    // Views that can be reused. 
    private final List<View> mDiscardedViews = new ArrayList<View>(); 
    // Views that are already in use. 
    private final SparseArray<View> mBindedViews = new SparseArray<View>(); 

    private final ArrayList<T> mItems; 
    private final LayoutInflater mInflator; 
    private final int mResourceId; 

    public ListPageAdapter(Context context, int viewRes) { 
    mItems = new ArrayList<T>(); 
    mInflator = LayoutInflater.from(context); 
    mResourceId = viewRes; 
    } 

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

    @Override 
    public boolean isViewFromObject(View v, Object obj) { 
    return v == mBindedViews.get(mItems.indexOf(obj)); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
    View view = mBindedViews.get(position); 
    if (view != null) { 
     mDiscardedViews.add(view); 
     mBindedViews.remove(position); 
     container.removeView(view); 
    } 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
    View child = mDiscardedViews.isEmpty() ? 
     mInflator.inflate(mResourceId, container, false) : 
      mDiscardedViews.remove(0); 

    T data = mItems.get(position); 
    initView(child, data, position); 

    mBindedViews.append(position, child); 
    container.addView(child, 0); 
    return data; 
    } 

    public void add(T item) { 
    mItems.add(item); 
    } 

    public T remove(int position) { 
    return mItems.remove(position); 
    } 

    public void clear() { 
    mItems.clear(); 
    } 

    /** 
    * Initiate the view here 
    */ 
    public abstract void initView(View v, T item, int position); 
} 

एडाप्टर में डेटा बदलते समय ViewPager स्वचालित रूप से अपडेट नहीं होता है। इसके लिए मैंने

pager.setAdapter(null); 
pager.setAdapter(myAdapter); 
pager.setCurrentItem(0); 
+2

कोड के इस पीईसी के लिए धन्यवाद – John

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