2010-06-24 10 views
10

एंड्रॉइड में ListView के पहले दृश्यमान दृश्य को देखने का कोई तरीका है?एंड्रॉइड सूची दृश्य से पहले दृश्यमान दृश्य को कैसे प्राप्त करें

मैं डेटा प्राप्त कर सकता हूं जो एडाप्टर में पहला दृश्य बैक करता है लेकिन ऐसा लगता है कि मुझे ListView में पहला दृश्य नहीं मिल सकता है।

स्क्रॉल कार्रवाई समाप्त होने के बाद मैं पहला दृश्य दृश्य बदलना चाहता हूं। मुझे पता है कि मुझे दृश्य के संदर्भों को सहेजना नहीं चाहिए।

+0

विचारों पुनर्नवीनीकरण काम करता है। आपको विशिष्ट दृश्य की क्या आवश्यकता है? –

+0

मैं अपना प्रश्न संपादित करता हूं। उपयोगकर्ता ने सूची को स्क्रॉल करने के बाद दृश्य को बदलना चाहता हूं। – Janusz

उत्तर

12

असल में सूची दृश्य आइटम केवल सूची दृश्य के बच्चे हैं। तो सबसे पहले दिखाई ListView आइटम है:

listView.getChildAt(0) 
+0

धन्यवाद यदि आप शून्य के लिए लौटे हुए दृश्य की जांच करते हैं तो आप बहुत अच्छा काम करते हैं। ऐसा लगता है कि यदि आप गतिविधि शुरू करते हैं और कभी-कभी सूची में कोई बच्चा नहीं होता है तो स्क्रॉलिंग और सूची निर्माण कभी-कभी होता है। – Janusz

+5

मुझे लगता है कि इस तरह गलत है। क्योंकि आपको लोड होने वाली पहली वस्तु मिलती है। और शायद वह आइटम पहले दिखाई नहीं दे रहा है। लेकिन listView.getFirstVisiblePosition() बेहतर है और हमेशा अच्छी तरह से काम करता है। – NrNazifi

+0

हेडर होने पर सटीक नहीं है। –

3

ListView एक समारोह getFirstVisiblePosition तो पहला दृश्य दृश्य दिखाने के लिए है, कोड होगा:

listView.getChildAt(listView.getFirstVisiblePosition());

+7

बच्चे() स्थिति और getFirstVisiblePosition() द्वारा लौटाई गई स्थिति के बीच एक अंतर है। GetFirstVisiblePosition की स्थिति मेरे डेटा एडाप्टर में स्थिति है। ChildAt केवल विचारों को ध्यान में रखता है जो इस समय सूचीदृश्य में दिखाई दे रहे हैं। – Janusz

+0

मुझे जवाब पसंद आया और कुछ काम करने के लिए यह उपयोगी पाया। फिर भी बच्चे का उपयोग एडाप्टर में स्थिति के साथ काम नहीं करेगा। यदि आप fetFirstVisiblePosition का उपयोग करते हैं, तो आपको getItem का उपयोग करके एडाप्टर पर फिर से पास करना होगा। तो adapter.getItem (listview.getFirstVisiblePosition) और अधिक सही होगा। फिर भी, उस मामले में आपके पास ओप के रूप में दृश्य नहीं है। फिर भी, इसे इंगित करने के लिए धन्यवाद। –

3
दरअसल

listView.getChildAt(listView.getFirstVisiblePosition()) पहला दृश्य आइटम देता है,
लेकिन यह आधा दृश्य सूची आइटम हो सकता है।

पहले पूरी तरह से दिखाई देने वाली सूची आइटम पाने के लिए,

if (listView.getChildAt(0).getTop() < 0) { 
    int firstCompletelyVisiblePos = listView.getFirstVisiblePosition() + 1; 
} 
0

आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

for (int i = 0; i <= conversationListView.getLastVisiblePosition() - conversationListView.getFirstVisiblePosition(); i++) { 
     View listItem = conversationListView.getChildAt(i); 
} 
0

listView.scrollBy (0, -40);

यह बहुत अच्छी तरह से

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