2013-08-18 5 views
8

Я создал динамический ListView, где объекты добавляются сверху.Android ListView setSelectionFromTop не работает

Когда пользователь нажимает кнопку, listView обновляется из содержимого массива, а затем вызывает notifyDataSetChanged() в настраиваемом массиве.

Теперь я хочу его поддерживать позицию списка при добавлении, поэтому я добавил этот код:

 // 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 не изменяется во время запуска этого фрагмента кода, поэтому он обновляет размер ListView после я назвал setSelectionFromTop. Может быть, это проблема?

ответ

19

Хитрость заключалась в следующем:

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

Используя пост метод позволяет ждать обновление ListView до позиции смены.

+0

большое спасибо, с этим: listview.post (...) также listView.setSelection снова работал для меня (не работал каким-либо другим способом) – cV2