6

का उपयोग करते समय रीफ्रेशिंग फ्रैगमेंट व्यू लगता है कि रीफ्रेश समस्या से पहले चर्चा की गई है, लेकिन मेरे लिए कोई भी समाधान काम नहीं करता है।FragmentStatePagerAdapter

मैं जो करने की कोशिश कर रहा हूं: मैं FragmentStatePagerAdapter का उपयोग कर रहा हूं। एडाप्टर की प्रत्येक स्थिति में एक टुकड़ा होता है जिसमें एक रैखिक लेआउट होता है जिसमें चेस की तरह शतरंज होता है, प्रत्येक सेल को चेकडटेक्स्ट व्यू द्वारा दर्शाया जाता है।

और एक श्रोता जो क्लिक के लिए सुनना चाहिए और कोशिकाओं पर पिछले चयन को हटा देता है और नया चयन करता है।

क्या काम कर रहे: प्रत्येक टुकड़ा जब मैं बचाया कोशिकाओं सूची से सभी राज्यों के लिए एक सेल क्लिक करें सभी डेटा/डिफ़ॉल्ट राज्यों (गणना की है, जबकि टुकड़ा एक सूची में भरी हुई है)

साथ सही ढंग से भरी हुई है सही ढंग से लाया जाता है और मैं डीबगिंग करते समय कोड में राज्य परिवर्तन को बदल सकता हूं। साथ ही मैं चेक किए गए टेक्स्टव्यू के लिए एक नया राज्य असाइन करता हूं जो एक सेल का प्रतिनिधित्व करता है।

मुद्दा:: इस तरह सेट किया गया है हालांकि मान संग्रहीत और सही ढंग से आवंटित कर रहे हैं दृश्य दृश्य में कोशिकाओं के मूल्यों अद्यतन नहीं मिलता रिफ्रेश नहीं किया जा सकता है।

टिप्स मैं कोशिश की है कि काम नहीं किया: 1. कॉल adapter.notifyDataSetChanged:

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

2. जोड़ना: FragmentStatePagerAdapter का उपयोग करते समय जब हम अधिरोहित है कहा जा सकता है DestroyItem के लिए ओवर्रिडेन विधियां और getItem पर मानचित्र में टुकड़े जोड़ना:

यह उचित नहीं है क्योंकि मैं साथ काम कर रहा हूं FragmentStatePagerAdapter, इसलिए इस पेजर एडाप्टर का उपयोग करने का पूरा उद्देश्य समाप्त हो जाएगा।

3. कॉलिंग अमान्य: यह इस परिदृश्य के लिए अनुचित है, मुझे रीयलटाइम रीफ्रेश की आवश्यकता है।

4. तत्काल में सेटटैग() विधि तत्काल(): मुझे नहीं लगता कि यह इस स्थिति में उपयुक्त है।

संदर्भित धागे: Refresh images on FragmentStatePagerAdapter on resuming activity

ViewPager PagerAdapter not updating the View

Update ViewPager dynamically?

notifyDataSetChanged fails to update ListView

मैं अपने मुद्दे को राज्य के लिए संभव के रूप में स्पष्ट की कोशिश की है, अगर कोई और अधिक स्पष्टीकरण की जरूरत है, पूछते हैं ।

तत्काल उत्तर अत्यधिक सराहना की जाएगी,

चीयर्स

**** अद्यतन *****

मैं, ViewPagerIndicator उपयोग कर रहा हूँ डिफ़ॉल्ट ViewPager के बजाय।

+0

आपके सेटअप में, प्रत्येक टुकड़ा क्या दर्शाता है? क्या यह एक समय में स्क्रीन पर केवल एक टुकड़ा दिखा रहा है? आपके द्वारा जोड़ा गया कोड कहां है? क्या यह खंड वर्ग के अंदर है? अंत में, ग्रिडरो क्या है? –

+0

हाय शेरिफ, प्रत्येक टुकड़ा एक शतरंज बोर्ड का प्रतिनिधित्व करता है। मेरे पास एक ऐसी गतिविधि है जो कंटेनर खंड को कॉल करती है, इस कंटेनर फ्रैगमेंट में एक व्यूअर है जिसमें FragmentStatePagerAadaper सेट है। प्रत्येक एडाप्टर आइटम एक टुकड़ा है और इस खंड में इसके क्रिएटिव्यू में प्रत्येक शतरंज दृश्य प्रारंभ होता है। इसके अलावा एक सेल के लिए श्रोता एक ही टुकड़े में है जहां मैं वर्तमान राज्यों और नए राज्य की जांच करता हूं और तदनुसार राज्य को बदलता हूं। एक ग्रिडरो एक सेल का प्रतिनिधित्व करने वाले चेकटेक्स्टव्यू की एक पंक्ति है। मुझे उम्मीद है कि यह आपके सभी सवालों का जवाब देगा, कोई संकेत ....? – AliR

+0

तथ्य यह है कि आपके टुकड़े के अंदर सब कुछ होता है इसका मतलब है कि इस परेशानी की आवश्यकता नहीं है। क्या आप सुनिश्चित हैं कि आपका चयनकर्ता (पृष्ठभूमि) सही है? क्या आप इसे और प्रत्येक सेल के लिए अपना एक्सएमएल दिखा सकते हैं। आम तौर पर जब दृश्य अद्यतन नहीं होता है तब होता है जब आप व्यूअरजर के अंदर एक विशिष्ट खंड को अद्यतन करने का प्रयास कर रहे होते हैं। –

उत्तर

0

सूचित करने के संबंध मेंडेटाट चेंज() फ़ंक्शन, मेरे पास दो अलग-अलग अनुभव हैं।

जब मैंने ListView को अपडेट करने के लिए ArrayAdapter के अपने उप-वर्ग का उपयोग किया, तो यह सीधे काम करता था। जब मैंने NotifyDataSetChanged() को कॉल किया, तो सूची दृश्य आइटम अपडेट किए जाते हैं।

हालांकि, जब मैंने ViewPager को अपडेट करने के लिए FragmentStatePagerAdapter का उप-वर्ग का उपयोग किया, तो नोटिफ़ाइंग कॉलटासेट चेंज() काम नहीं कर रहा था। NotifyDataSetChanged() सभी पंजीकृत DataSetObserver के ऑन चेंज() फ़ंक्शन को कॉल करने के लिए ज़िम्मेदार है, लेकिन पर्यवेक्षकों को स्वचालित रूप से ArrayAdapter में पंजीकृत नहीं किया गया है। आपको अपने आप से जमीन का काम करना है।

मेरे आश्चर्य के लिए, डेटासेट ओब्सर्वर एक इंटरफेस नहीं बल्कि एक अमूर्त वर्ग है। इसलिए मैं इसे टुकड़े के अपने उप-वर्ग में बस लागू नहीं कर सका। मुझे DataSetObserver के उप-वर्ग को परिभाषित करना है, फिर मेरे वर्ग के संदर्भ के रूप में इस वर्ग में एक सदस्य फ़ील्ड को परिभाषित करना है, और ओवरड्रिड ऑन चेंज() फ़ंक्शन आपके व्यू डिस्प्ले को अपडेट करें। कोड निम्नानुसार है:

public class DetailFragDataSetObserver extends DataSetObserver { 
private DetailTextFragment view_instance; 
protected static ArrayList<DetailFragDataSetObserver> list = new ArrayList<DetailFragDataSetObserver>(); 

public DetailFragDataSetObserver(DetailTextFragment f){ 
    view_instance = f; 
    list.add(this); 
} 
public DetailTextFragment getView(){ 
    return view_instance; 
} 
public static DataSetObserver findDataSetObserverFor(DetailTextFragment f){ 
    for (int i = 0; i<list.size(); i++){ 
     if (list.get(i).getView() == f) 
      return list.get(i); 
    } 
    return null; 
} 
public static void release(DataSetObserver observer){ 
    list.remove(observer); 
    ((DetailFragDataSetObserver)observer).view_instance = null; 
} 
@Override 
public void onChanged(){ 
    assert null != view_instance; 

    view_instance.vUpdateData(); 
} 
} 

आपको सावधान रहना होगा। आपको संदर्भ को कम करने और डेटा ओवरेट ऑब्जेक्ट ऑब्जेक्ट को अपने ओवर्रिडेन खंड में अनधिकृत करने की आवश्यकता है। ऑनड्रॉयय(), अन्यथा टुकड़ा एकत्रित कचरा नहीं हो सकता है।

बाद में, स्रोत कोडों को देखकर, मुझे ArrayAdapter और FragmentStatePagerAdapter मिला और भाई बहन नहीं हैं। वे पूरी तरह से अलग हैं। वे वास्तव में विभिन्न पैकेजों से हैं:

android.widget.ArrayAdapter 
    android.support.v4.app.FragmentStatePagerAdapter 

यही कारण है कि पूर्व में आसानी से काम नहीं किया गया था।

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