2012-10-19 11 views
22

मैं और row id के बीच ListActivity.onListItemClick() में अंतर के बारे में उलझन में हूं।प्रैक्टिकल अंतर ऑनलिस्ट में स्थिति और पंक्ति आईडी के बीच()

position The position of the view in the list 
id  The row id of the item that was clicked 

वहाँ दोनों के बीच कोई व्यावहारिक अंतर है:

प्रलेखन निम्नलिखित है? मुझे लगता है, क्योंकि दो अलग-अलग पैरामीटर हैं, ऐसी स्थितियां हैं जहां मान अलग हैं, लेकिन दस्तावेज़ीकरण में इस्तेमाल होने वाले शब्द के आधार पर, यह देखना मुश्किल है कि यह अंतर क्या हो सकता है। क्या यह है कि उनमें से एक Cursor या कुछ अन्य विशेष क्षमता द्वारा प्रदान की गई डेटाबेस पंक्ति आईडी का मान रख सकता है?

+2

आप सूची हल कर कहो। फिर स्थिति आईडी से बहुत अलग होगी। स्थिति शीर्ष से नीचे है और आईडी एक अद्वितीय पहचानकर्ता है। –

+0

तब अनन्य पहचानकर्ता कैसे असाइन किया जाता है? सूची दृश्य में वस्तुओं का क्रम पहली बार आबादी वाला है, इससे पहले कि किसी भी ऑपरेशन को सॉर्टिंग किया जाए? –

उत्तर

30

स्थिति: दृश्य की स्थिति सूची में
आईडी: आइटम क्लिक किए गए

एक स्थिति 0 से शुरू होता है की पंक्ति आईडी, के ऊपर से नीचे ListView, जबकि एक उचित पंक्ति आईडी प्राप्त करने के लिए यह महत्वपूर्ण है कि कर्सर, जो एडाप्टर को पास किया गया था, में '_id' नामक कॉलम होता है जो तालिका में प्रत्येक पंक्ति के लिए अद्वितीय आईडी का प्रतिनिधित्व करता है।

यदि आप एक ऐरेएडाप्टर का उपयोग कर रहे हैं, position और id समान हो जाते हैं। आईडी Adapter.getItemId(int) का लौटा मूल्य होगा, इसलिए यदि आप एक ऐरेएडाप्टर का उपयोग करते हैं तो यह स्थिति के समान होगा - ArrayAdapter स्रोत कोड की त्वरित खोज से पता चलता है कि यह वापसी स्थिति का उपयोग कर रहा है; आईडी को काम करने के लिए।

+0

यदि तालिका में '_id' फ़ील्ड नहीं है, तो क्या यह कहना सुरक्षित है कि स्थिति और पंक्ति आईडी समान होगी? –

+4

लगता है कि यदि आप एक सरणी का उपयोग कर रहे हैं एडाप्टर यह वही है। आईडी Adapter.getItemId (int) का लौटा मूल्य होगा, इसलिए यदि आप एक ArrayAdapter का उपयोग करते हैं तो यह स्थिति के समान होगा - ArrayAdapter स्रोत कोड की त्वरित खोज से पता चलता है कि यह वापसी स्थिति का उपयोग कर रहा है; आईडी को काम करने के लिए :) –

+3

यह हेडर व्यू के साथ 'ListView' रखने के मामले को अनदेखा करता है। उस स्थिति में स्थिति = आईडी + 1. [मेरा उत्तर देखें] (http://stackoverflow.com/a/24531354/383414) –

24

answer by Lazy Ninja अधिकतर सही है, हालांकि ListView.addHeaderView(View) विधि को कॉल करके जोड़ा गया हैडर दृश्य के साथ ArrayAdapter का उपयोग करने के मामले को अनदेखा करता है।

अपनी सूची एक हैडर आइटम है, यह स्थिति 0.

में हो जाएगा तो सूची में पहले 'असली' आइटम होगा:

  • position = 1
  • id = 0

सामान्य तौर पर, position = id + number_of_header_views


अगर आप है कि पहले से ही सही ढंग से काम कोड में किसी सूची में कोई शीर्ष लेख दृश्य जोड़ने का निर्णय महसूस करने के लिए महत्वपूर्ण है।सूचकांक के रूप में

  • उपयोग position - 1
  • उपयोग id सूचकांक
  • उपयोग ListView.getItemAtPosition(int) बजाय के रूप में:

    आप position उपयोग करके अपने आइटम एक्सेस कर रहे हैं, तो अपने कोड निम्नलिखित लाइनों के साथ अपडेट करने की आवश्यकता Adapter.getItem(int)

संबंधित चर्चा के लिए यह प्रश्न भी देखें:

+2

हेडर के साथ सूचीदृश्य को समझने में आपके द्वारा पोस्ट किया गया अंतर बहुत महत्वपूर्ण बिंदु है .. धन्यवाद यहां आपके अतिरिक्त उत्तर के लिए बहुत कुछ .. – Kushal

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