2012-05-16 20 views
9

मेरे पास सप्ताह के दिनों के साथ यह PageAdapter है, प्रत्येक पेजर के लिए मेरे पास एक ही लेआउट है। मेरी समस्या यह है कि सही सूची को कैसे अपडेट करें दिन को बदलने पर देखें। जब मैं दिन बदलता हूं तो पेजर एक नया पेजर बनाता है और दूसरे को हटा देता है, जब यह हुआ तो मेरी सूचीदृश्य नए पेजर को इंगित करता है लेकिन वर्तमान नहीं। उदाहरण के लिए, बुधवार है और मैं सूचीदृश्य संदर्भ सहेजता हूं, जब मैं मंगलवार के लिए बदलता हूं तो सोमवार पेजर बनता है और गुरुवार को हटा दिया जाता है, और मेरा संदर्भ बिंदु अंतिम पृष्ठ (सोमवार) बनाता है लेकिन मैं मंगलवार को हूं।ViewPager सामग्री को कैसे अपडेट करें?

मेरे pageAdapter:

ListView lvwConfig; 

@Override 
public Object instantiateItem(View pager, int position) { 
    LayoutInflater inflater = (LayoutInflater) mContext 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.pager_layout, null); 
    lvwConfig = (ListView) v.findViewById(R.id.lvwConfig); 
    ((ViewPager) pager).addView(v, 0); 

    return v; 
} 

मैं ListView करना चाहते हैं हमेशा वर्तमान आइटम की सूचीदृश्य को इंगित।

+0

http://stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

उत्तर

39

इस पोस्ट पढ़ें: PagerAdapter

आप PagerAdapter में इस समारोह को लागू कर सकते हैं:

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

के बाद, तो आप इस फ़ंक्शन का उपयोग किया जा सकता है:

yourPagerAdapterObject.notifyDataSetChanged(); 

इस विधि बुरा है अगर आपके पास प्रदर्शित करने के लिए बहुत सारे विचार। सभी विचारों का हमेशा पुनर्मूल्यांकन किया जाता है। लेकिन आपके मामले में, कुछ विचारों के लिए, यह ठीक है।

+0

कृपया पोस्ट http देखें : //stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

5

पेजरएडाप्टर में getItemPosition ओवरराइड करना आसान है, लेकिन थोड़ा अधिक अक्षम है। इस तरह, जब आप notifyDataSetChanged() पर कॉल करते हैं, तो दृश्य पेजर सभी दृश्यों को हटा देगा और उन सभी को पुनः लोड करेगा। इसलिए रीलोड प्रभाव प्राप्त होता है। एक और विकल्प था कि suggested by alvarolb, विधि instantiateItem() में एक नया दृश्य तत्काल करने पर है। फिर notifyDataSetChanged() का उपयोग करने के बजाय, आप जिस दृश्य को अपडेट करना चाहते हैं उसे ढूंढने के लिए आप findViewWithTag() का उपयोग कर सकते हैं।