2011-10-19 6 views
6

मेरे ऐप में मैं ExpandableListView के साथ काम कर रहा हूं। मैं एडाप्टर का उपयोग कर रहा हूं जो BaseExpandableListAdapter बढ़ाता है। मैं ExpandableListView रीफ्रेश करना चाहता हूं।एंड्रॉइड अधिसूचना DataSet ExpandableListView के लिए चेंज किया गया काम नहीं कर रहा

मेरा ExpandableListView डेटाबेस के साथ लिंक जो हटाए गए बटन वाले आइटम होते हैं। यदि मैं डिलीट बटन दबा दूंगा तो आइटम को डीबी से स्थायी रूप से हटा दिया जाएगा। लेकिन listview एक ही समय में ताज़ा नहीं है। अगर मैं फिर से उस गतिविधि को ताज़ा करता हूं लेकिन एक ही समय में नहीं। मैं

mAdapter.notifyDataSetChanged(); 

का उपयोग कर रहा हूं लेकिन यह मेरी इच्छानुसार काम नहीं कर रहा है। क्यों?

+0

हमें अपने एडाप्टर कोड दिखाने? –

+0

क्या आपने 'कर्सर 'को फिर से पूछताछ की है? –

+0

क्योंकि मैंने केवल आइटम हटा दिया है, क्योंकि उस कर्सर की आवश्यकता नहीं है। तो मैं उस – Jyosna

उत्तर

4

आप रीफ्रेशिंग करते समय अपने ExpandableListView पर अमान्य Views() को अतिरिक्त रूप से कॉल करने का प्रयास कर सकते हैं।

+0

का उपयोग नहीं कर रहा हूं जहां मैं इसे लिखूंगा? bcz मैं डिलीट बटन पर चाहता हूं ताज़ा क्लिक करें खुश होना चाहिए। – Jyosna

+0

जब भी आपके ExpandableListView की सामग्री बदल दी गई थी। तो उदाहरण के लिए – senola

+0

उदाहरण के लिए कुछ प्रविष्टि हटा दी गई है लेकिन वहां अमान्य दृश्य() उपलब्ध नहीं हैं – Jyosna

8

मैंने बेसएक्सपैंडेबल लिस्ट एडाप्टर के निम्न ओवरराइड विधि पर सुपर कहा और तब से अधिसूचनाडेटाट चेंज() काम करता है।

@Override 
    public void registerDataSetObserver(DataSetObserver observer) { 
     super.registerDataSetObserver(observer);  
    } 
+0

अपडेट करने के बाद myExpandableList.invalidateViews() को कॉल करते समय काम नहीं करता है, यह सुनिश्चित नहीं है कि ExpandableListAdapter एक इंटरफ़ेस कैसे है। –

+0

मुझे लगता है कि यह थोड़ा देर हो चुकी है लेकिन वास्तव में मैंने कक्षा का उपयोग किया: बेसएक्सपेन्डबल लिस्ट एडाप्टर सूची एडाप्टर के रूप में .. – Cata

+0

आह ठीक है, जवाब को अद्यतन करने के लिए धन्यवाद। –

0

आप जब तक पूरे viewtree तैयार किया गया है इंतजार करना और फिर आप notifyDataSetChanged कॉल कर सकते हैं()

"एक दृश्य पेड़ पर्यवेक्षक श्रोताओं कि में वैश्विक परिवर्तन के बारे में सूचित किया जा सकता है रजिस्टर करने के लिए प्रयोग किया जाता है पेड़ देखें। इस तरह की वैश्विक घटनाओं में पूरे पेड़ के लेआउट, ड्राइंग पास की शुरुआत, टच मोड परिवर्तन की शुरुआत शामिल है, लेकिन इस तक ही सीमित नहीं है .... एक व्यू ट्रीओबर्वर को कभी भी अनुप्रयोगों द्वारा तत्काल नहीं किया जाना चाहिए क्योंकि यह दृश्य पदानुक्रम द्वारा प्रदान किया जाता है। अधिक जानकारी के लिए getViewTreeObserver() का संदर्भ लें। "

http://developer.android.com/reference/android/view/ViewTreeObserver.html

final View v = convertView; 
     ViewTreeObserver vto = convertView.getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      public void onGlobalLayout() { 
       v.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

       notifyDataSetChanged();  
}}); 
0

आप बिग बेवकूफ Ranch के विस्तार योग्य सूची का उपयोग कर रहे हैं, कृपया ध्यान दें कि RecyclerView.adapter के पारंपरिक notifyDataSetChanged() काम नहीं कर रहा।

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

// Parent Changes 
notifyParentItemInserted(int parentPosition) 
notifyParentItemRemoved(int parentPosition) 
notifyParentItemChanged(int parentPosition) 
notifyParentItemRangeInserted(int parentPositionStart, int itemCount) 

// Child Changes 
notifyChildItemInserted(int parentPosition, int childPosition) 
notifyChildItemRemoved(int parentPosition, int childPosition) 
notifyChildItemChanged(int parentPosition, int childPosition) 

अतिरिक्त विशिष्ट जानकारी के लिए पर जाएँ https://bignerdranch.github.io/expandable-recycler-view/