2011-08-04 12 views
20

में काम नहीं कर रहा है मुझे एक सूची दृश्य सेटअप के लिए एक कस्टम एडाप्टर मिला है और ठीक है। बटन पर अंतर्निहित डेटा में कुछ बदल दिया गया है, इसलिए ListView को रीफ्रेश करने के लिए एक सूचित करेंडेटासेट चेंज की आवश्यकता है। ठीक। लेकिन मैं सूची दृश्य को उस लाइन पर स्क्रॉल करना चाहता हूं जहां परिवर्तन हुआ था। इसके लिए मैं NotifyDataSetChanged के तुरंत बाद smoothScrollToPosition को कॉल करता हूं। और वह काम नहीं कर रहा है।सूचित करने के बाद smoothScrollToPositionDataSet चालू नहीं है एंड्रॉइड

अगर मैं अधिसूचना नहीं कॉल करता हूंडेटाट चेंज किया गया तो स्क्रॉल काम करता है, इसलिए स्क्रॉल ब्लॉक को सूचित करें। मैं शायद भविष्य में संसाधित होने वाली घटनाओं के साथ लड़ाई कर रहा हूं। क्या कोई मुझे गलत होने पर एक सूचक दे ​​सकता है?

+1

में अतिरिक्त जानकारी का एक छोटा सा; यह व्यवहार एम्यूलेटर पर होता है। फ़ोन पर चलने पर स्थिति मिश्रित होती है; कभी-कभी स्क्रॉल काम करता है और कभी-कभी नहीं। ऐसा लगता है कि सुचारू होने से पहले अधिसूचना समाप्त हो गई है या नहीं। या शायद किस क्रम में। – tbeernot

उत्तर

78

उपयोग post() विधि अपडेट करना समाप्त करने के बाद आप notifyDataSetChanged() फोन सूची के लिए इंतजार करना:

adapter.notifyDataSetChanged(); 
list.post(new Runnable() { 
    @Override 
    public void run() { 
    //call smooth scroll 
    } 
    }); 
+0

धन्यवाद! यह काम। एम्यूलेटर पर सूची अंत तक कूद जाती है और फिर जहां मैंने इसे जाने के लिए कहा, लेकिन एक फोन पर यह दिखाई नहीं दे रहा है। – tbeernot

+0

सिद्धांत रूप में, सूची को उसी स्थिति में रहना चाहिए जहां यह 'डेटाडेटा चेंज() को अधिसूचित करने से पहले था, इसलिए यदि आप कम तत्वों के साथ ताज़ा करते हैं, तो यह प्रभावी रूप से पहले अंत तक जाएगा। – dmon

+0

परीक्षणों से पता चलता है कि डेटाडेटाडेटेड सूची हमेशा सूची तक पहुंच जाती है, smoothScrollToPosition इसे कूदता है ताकि प्रविष्टि शीर्ष पर हो। एमुलेटर पर यह स्पष्ट रूप से दिखाई देता है, वास्तविक फोन पर सूची "बेचैन" होती है और जब कोई आवश्यकता नहीं होती है तो कार्रवाई होती है। – tbeernot

0

मैं dmon के उदाहरण कोड की कोशिश की है और मैं इसे हमेशा काम नहीं कर देखते हैं।

adapter.notifyDataSetChanged(); 
channelsListView.setSelection(scrollPos); // it works without smoothScrollToPositionFromTop(..) or smoothScrollToPosition() methods call. 

मैं इस सवाल का जवाब पढ़ने के बाद विधि से ऊपर का उपयोग करने के मुख्य विचार पाया:

असल में मैं एक और दृष्टिकोण स्क्रॉल प्रदर्शन करने के लिए मिल गया है https://stackoverflow.com/a/20997828/2133585

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