2011-09-05 29 views
4

我有一個帶有ListView的片段,我希望ListView在保存和恢復片段時保持其滾動位置。通常這很簡單,只需在保存時調用ListView.getFirstVisiblePosition()並在恢復時調用ListView.setSelection()(ListView.setSelectionFromTop()(如果您想要)。滾動ListView到光標加載後的位置

但是,我正在使用加載程序,並且當活動啓動時,我的ListView未完全填充。如果我在onActivityCreated()期間設置了Selection(),那麼該列表將不會有任何內容滾動至此,並且該調用將被忽略。

我現在通過在將來某個時間發佈滾動來解決這個問題,但是這絕對不是理想的。我更喜歡它在數據加載完成後向右滾動。我幾乎在這裏做,但swapCursor()不刷新,它只是爲未來安排失效。

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    mAdapter.swapCursor(data); 
    if (savedScrollPosition != null) { 
     Log.d(TAG, "loaded and scrolling to " + savedScrollPosition); 
     new Handler().postDelayed(new Runnable(){ 
      @Override 
      public void run() { 
       list.setSelection(savedScrollPosition); 
       savedScrollPosition = null; 
      } 
     }, 100); 
    } 
} 

你知道任何滾動ListView的權利,因爲ListView完成填充數據嗎?

回答

7

試試這個:

listView.post(new Runnable() { 

     @Override 
     public void run() { 
      listView.setSelection(savedScrollPosition); 
      savedScrollPosition = null; 
     } 
    }); 
+0

工作就像一個魅力。謝謝! – num1

+0

很高興爲你效勞:) – Shafi

+0

你在哪裏添加了這段代碼?你能否再解釋一下 - 我不確定我理解這裏發生了什麼。 – RightHandedMonkey