2015-09-24 18 views
5

मैं RecyclerView#Adapter के साथ notifyItemRangeChanged के संबंध में किसी समस्या में भाग रहा हूं। ऐसा लगता है कि अगर Adapter सोचता है कि इसका अंतिम कॉलपर 0 का आकार है, और फिर मैं Adapter#notifyItemRangeChanged(0, 1) पर कॉल करता हूं, तो Adapter कॉल को अनदेखा कर देगा (इसके परिणामस्वरूप नया आइटम डाला जा रहा है, उदाहरण के लिए)।पुनर्चक्रण देखें देखें ItemRangeChanged नया डेटा नहीं दिखाता

क्या यह अपेक्षित व्यवहार है?

उत्तर

13

क्या यह अपेक्षित व्यवहार है?

संक्षिप्त उत्तर: हाँ।

डॉक्स से

पर notifyDataSetChanged() (हाँ, अलग पद्धति, मुझे पता है, लेकिन सिर्फ इसे यहाँ संदर्भित के बाद से यह बीच आइटम और संरचनात्मक परिवर्तन में परिवर्तन अंतर बताते हैं):

वहाँ दो अलग हैं डेटा परिवर्तन घटनाओं, आइटम परिवर्तन और संरचनात्मक परिवर्तन के वर्ग। आइटम परिवर्तन तब होते हैं जब एक आइटम में उसका डेटा अपडेट होता है लेकिन कोई स्थितिगत परिवर्तन नहीं हुआ है। संरचनात्मक परिवर्तन तब होते हैं जब डेटा सेट में आइटम डाले जाते हैं, हटाए जाते हैं या स्थानांतरित होते हैं।

यह एक आइटम परिवर्तन घटना, नहीं एक संरचनात्मक परिवर्तन घटना है:

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

यह आपके प्रश्न का उत्तर देना चाहिए। आप संरचनात्मक परिवर्तन (यानी, आप एक आइटम जोड़ रहे हैं) बना रहे हैं, इसलिए notifyItemRangeChanged() कॉल करने के लिए उचित विधि नहीं है। इसके बजाय, आपको notifyItemRangeInserted() (या इसके एकवचन समतुल्य) को कॉल करना चाहिए, जो एक संरचनात्मक परिवर्तन को इंगित करता है।

+0

आह, आपके विस्तृत उत्तर के लिए धन्यवाद! यह दुर्भाग्यपूर्ण है क्योंकि मेरे एडाप्टर संरचना में सबडैप्टर शामिल हैं, इसलिए मैं अनिवार्य रूप से सबडाप्टर को एक मूल परिवर्तन के पैरेंट एडाप्टर को सूचित करना चाहता हूं जब संपूर्ण पैरेंट एडाप्टर को रीफ्रेश करने के बजाए कुछ बदल जाता है। हालांकि, अब मैं इसके बारे में सोचता हूं, मुझे 'NotifyItemRangeInserted' का उपयोग करने के बजाय क्या करना चाहिए, इसलिए माता-पिता एडाप्टर नए डेटा के बारे में जानता है ... वैसे भी, मैं अब ब्लैबरिंग कर रहा हूं। एक बार फिर धन्यवाद :) – Jin

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