2013-08-18 9 views
8

मैंने एक गतिशील ListView बनाया है जहां ऑब्जेक्ट्स शीर्ष से जोड़े गए हैं।Android ListView setSelectionFromTop काम नहीं कर रहा

जब उपयोगकर्ता बटन दबाता है तो सूची दृश्य को किसी सरणी की सामग्री से अपडेट किया जाता है, तो सूचित करेंडेटासेट चेंज() को कस्टम सरणी एडाप्टर पर कॉल किया जाता है।

अब मैं सूची स्थिति को जोड़ते समय mantain करना चाहते हैं, तो मैं इस कोड को कहा:

 // pausedCounter trace the number of objects(lines) to add to the listView 
     int idx = listView.getFirstVisiblePosition() + pausedCounter; 
     View first = listView.getChildAt(0); 
     int position = 0; 

     if (first != null) 
      position = first.getTop(); 

     // cycle to add the new objects to the listView 
     for (Tweet[] tweets1 : pausedTweets) 
      super.updateTweets(tweets1); 


     listView.setSelectionFromTop(idx, position); 

     // reset of counter and accumulator 
     pausedTweets = new ArrayList<Tweet[]>(); 
     pausedCounter = 0; 

इस तरह से इस कोड को व्यवहार: यदि getFirstVisiblePosition रिटर्न 2, और pausedCounter 5, अपडेट के बाद सूची नए पांच तत्वों के 3 वें स्थान पर सेट की जाएगी।

मैं चाहता हूं कि सूची का पहला दृश्य तत्व 8 वें स्थान पर सेट हो।

आगे परीक्षण करने के बाद मुझे पता चला कि ListView के बच्चों की संख्या कोड के इस टुकड़े की चलाने के दौरान परिवर्तन नहीं करता है, तो यह मैं setSelectionFromTop कहा जाता है के बाद ListView के आकार अद्यतन करता है। क्या यह समस्या हो सकती है?

उत्तर

19

चाल यह था:

 listView.post(new Runnable() { 
      @Override 
      public void run() { 
       listView.setSelectionFromTop(idx, finalPosition); 
      } 
     }); 

परिवर्तन स्थिति से पहले ListView का अद्यतन प्रतीक्षा करने के लिए पद विधि परमिट का उपयोग करना।

+0

बहुत धन्यवाद, इसके साथ: listview.post (...) listView.setSelection ने मेरे लिए फिर से काम किया (किसी अन्य तरीके से काम नहीं किया) – cV2

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