2012-05-23 6 views
9

Android के PagerAdapter कक्षा में विधि getItemPosition के लिए दस्तावेज़ में कहा गया है कि यह है:कब प्राप्त होना चाहिए ITemPosition किसी आइटम की स्थिति में परिवर्तनों पर विचार करें?

कहा जाता है जब मेजबान दृश्य निर्धारित करने के लिए अगर किसी आइटम की स्थिति बदल गई है प्रयास कर रहा है।

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

हालांकि, यह कभी भी नहीं बताता है कि एक ओवरराइडिंग विधि को बदलने की स्थिति पर विचार करना चाहिए। क्या इसका मतलब यह है कि स्थिति उस स्थिति से अलग है जब पिछली बार आइटम प्राप्त होता था ITemPosition कहा जाता था? क्या इसका मतलब है कि आखिरी बार सूचित करने के लिए आइटम की स्थिति अलग हैडेटाट चेंज को बुलाया गया था? या इसका मतलब यह है कि आइटम की स्थिति अलग-अलग होती है जब आइटम को दृश्य में जोड़ा गया था?

उत्तर

11

आप ViewPager.java में देख सकते हैं कि getItemPosition केवल dataSetChanged में कहा जाता है। इसका मतलब है कि आइटम की स्थिति बदल गई है अगर यह पिछली बार dataSetChanged से अलग है।

मैं "बदले" के अर्थ के बारे में इतना चिंता नहीं करता; वहाँ दो मामलों हैं:

  1. डाली गई वस्तुओं की कभी नहीं बदलता की स्थिति है, तो getItemPosition रिटर्न POSITION_UNCHANGED;
  2. आइटम की स्थिति में परिवर्तन, या आइटम हटा दिए जाते हैं। यदि आइटम स्थिति नहीं बदली है, तो POSITION_UNCHANGED या वास्तविक स्थिति लौटने पर कोई फर्क नहीं पड़ता है। तो कार्यान्वयन सरल रखने के लिए आप स्थिति (या POSITION_NONE) लौट सकते हैं और POSITION_UNCHANGED के बारे में भूल ..
7

डिफ़ॉल्ट रूप से, एक ViewPager में आइटम की स्थितियां निर्धारित माना जाता है; यही कारण है कि getItemPosition() डिफ़ॉल्ट रूप से POSITION_UNCHANGED देता है। जब आप किसी आइटम को चारों ओर ले जाते हैं, तो ViewPager को यह पता होना चाहिए कि कोई आइटम कहां निकालना है (आइटम की पुरानी स्थिति) और इसे कहां जोड़ना है। यह getItemPosition() के लिए उपयोग किया जाता है। यह आपको व्यूपेजर को बताएगा कि कौन सा आइटम कहां रखा जाए, यहां तक ​​कि आपके पृष्ठों को तुरंत चालू करने के बाद भी।

getItemPosition() केवल तभी कॉल किया जाता है जब आप अपने पेजर एडाप्टर पर notifyDataSetChanged() पर कॉल करते हैं। डिजाइन द्वारा इसका मतलब है कि "बदले गए" का अर्थ है "जब व्यूपेजर ने आखिरी बार अपने पृष्ठों को पॉप्युलेट किया था, तब से बदल दिया गया है, क्योंकि notifyDataSetChanged() व्यूपार्जर को अपने बच्चों को आवश्यकतानुसार दोबारा हटाने का कारण बनता है। दूसरे शब्दों में: "बदले गए" में आपके द्वारा उल्लिखित अर्थों में से कोई भी है; जो भी सबसे हालिया होने वाला है।

मुझे लगता है कि getItemPosition नमूना के बिना समझने में काफी मुश्किल है। See my example of how to use getItemPosition(...) here; मुझे लगता है कि यह कुछ चीजों को स्पष्ट करेगा।

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