2010-03-29 17 views
42

notifydatasetchanged(); पर कॉल करने के बाद मैं सूची के नीचे स्क्रॉल करना चाहता हूं ताकि उपयोगकर्ता सूचीदृश्य में अंतिम रिकॉर्ड देख सके।प्रोग्रामव्यू के नीचे प्रोग्रामवेलिक के नीचे स्क्रॉल कैसे करें?

(मैं चैट मॉड्यूल लिख रहा हूँ ताकि इस प्रयोजन के लिए मैं सूची में सबसे नीचे नवीनतम रिकॉर्ड की जरूरत दिखाई दे सकता है)

किसी भी एक मेरा मार्गदर्शन कर सकते हैं कि इस लक्ष्य को हासिल करने के लिए?

उत्तर

71

listView.post(new Runnable(){ 
    public void run() { 
    listView.setSelection(listView.getCount() - 1); 
    }}); 

'पोस्ट' खासकर यदि आप बहुत हाल ही में सूची को अद्यतन किया है, मेरे अनुभव में कुछ समय के लिए आवश्यक प्रतीत हो रहा है की कोशिश करो।

+1

यह बहुत अच्छा काम करता है। मैंने 'एंड्रॉइड की कोशिश की: stackFromBottom =" true "पहले और समस्या यह है कि अगर मेरी सूची में केवल एक ही तत्व था तो यह स्क्रीन के नीचे होगा। धन्यवाद – philipp

+0

नोट: यदि अंतिम तत्व की ऊंचाई सूचीदृश्य की ऊंचाई से बड़ी है, तो अंतिम तत्व का शीर्ष सूची के शीर्ष के बीच गठबंधन किया जाएगा, यानी तत्व के नीचे दिखाई नहीं देगा। यही कारण है कि रैकोज द्वारा स्टैकफ्रॉमबॉटम समाधान का वर्णन चैट जैसी कार्यक्षमता के लिए बेहतर है। –

+0

एक आकर्षण की तरह काम किया! मैंने stackFromBottom = "true" भी कोशिश की लेकिन चूंकि मैं सूची को साफ़ नहीं कर रहा था, यह मेरी स्थिति के लिए काम नहीं करता था। (कम से कम मुझे लगता है कि यही कारण है।) – BostonGeorge

81

मुझे पता है कि इसका उत्तर दिया गया है और आपने जवाब लिया और यह एक साल पहले से अधिक था। लेकिन ऐसा करने का एक बेहतर तरीका ट्रांसक्रिप्ट मोड है। डेमो के लिए, दृश्य> सूची> ट्रांसक्रिप्ट के तहत एंड्रॉइड एपीआई डेमो देखें।

आप XML में अपनी सूची दृश्य पर निम्नलिखित सेट करेंगे।

android:stackFromBottom="true" 
android:transcriptMode="alwaysScroll" 

जब भी आप notifyDataSetChanged() पर कॉल करते हैं तो यह हमेशा काम करेगा। यदि आप चैट अनुप्रयोगों के लिए बेहतर परिणाम चाहते हैं तो आप android:transcriptMode से normal सेट कर सकते हैं: यह केवल तभी स्क्रॉल करेगा जब अंतिम आइटम पहले से ही देखे जा सकें। इस तरह आपके उपयोगकर्ता पिछली बातचीत को बिना किसी रुकावट के देख सकते हैं जब अन्य उपयोगकर्ता चैट करते हैं।

+5

बहुत बहुत धन्यवाद! एंड्रॉइड: ट्रांसक्रिप्टमोड जादुई है :) आपने मुझे बचाया! – Ciprian

+0

वास्तव में यह एक बहुत अच्छा विकल्प है। धन्यवाद :) – Dinesh

+0

शांत! यह काम करता हैं ! – Penzzz

1

मैं अपने बहुत देर से जवाब देने के लिए जानते हैं, लेकिन यह किसी को मदद मिलेगी हो सकता है। android:transcriptMode="alwaysScroll" का उपयोग करके सूची को नीचे स्क्रॉल करने के लिए मजबूर किया जाएगा (जैसा कि हमने android:stackFromBottom="true" का उपयोग किया है) भले ही आप शीर्ष पर स्क्रॉल करने का प्रयास करेंगे, जो आमतौर पर अधिकतर समय की आवश्यकता होती है। तो android:transcriptMode="alwaysScroll के बजाय आप android:transcriptMode="normal का उपयोग कर सकते हैं जो चैट ऐप की आवश्यकता के समान व्यवहार करेगा और यदि उपयोगकर्ता शीर्ष पर सामग्री देखना चाहता है तो हमेशा स्क्रॉल की सूची को मजबूर नहीं करेगा।

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