2009-10-26 124 views
2

後更新「刷新」和「setSelection」的方法在我的ListView中,我選擇一個項目以「添加收藏夾」,我必須做一些東西的工作,我再次填充數據刷新列表,然後我執行OnScrollListener使用setSelection(firstVisibleItem)來設置列表顯示右項上添加。在更新ListView(Android)

有沒有更好的方法來做到這一點。我的意思是像mCursor.requery()或類似的android APIs?或者任何建議的方式?

+0

我感興趣的是這個問題的答案;我也有類似的問題 – I82Much 2009-10-26 15:12:46

回答

1

嗯,requery()是重新填充由SimpleCursorAdapter支持的ListView的首選方法。在ListView上調用setSelection()似乎是確保所需項目可見的好方法。我不清楚OnScrollListener與這些有什麼關係。

+0

我也必須考慮OnScrollListener! :-) 但我猜**這裏的含義是,通過使用此偵聽器並記住通過'firstVisibleItem'來的最後一個值,並在重新定位時使用** this **值,更新數據後所有內容看起來都一樣! – Zordid 2010-02-25 12:48:18

1

如果你只是打電話setSelection(),這將使你的項目顯示不自然地。例如,如果您的項目在屏幕的「中間」處可見並且其位置是8.當您添加收藏夾,刷新數據,setSelection(8)項目將顯示在屏幕的「頂部」(而是在'中間')。

所以,那爲什麼我用OnScrollListener得到firstVisibleItem並且用這個值來設置位置。它使項目自然顯示。這是函數:

public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){} 

我認爲它與任何人誰在ListView更新數據經常發生。我希望有人能分享這個問題的經驗。

1
mListActivity.runOnUiThread(
    new Runnable() { 
     public void run() { 
      x.setSelection(x.getCount()); 
     } 
    } 
); 
5

要顯示所選擇的項目,而在中間比在我ListView頂部,我用setSelectionFromTop()

getListView().setSelectionFromTop(pos, getListView().getHeight()/2); 

當然,你可以額外減去一半的單元佈局的高度,從分割上面來正確地選擇中間的選擇。

+0

將高度除以2不會使項目居中,而是將項目的頂部開始放到一半,從而給出將項目放在列表中的感覺。我通常減去半行高度,或者如果視圖高度很難建立,則除以2.5或3。 – Lmickos 2013-12-05 10:19:11

1

這是大家都在找什麼:

onResume() 
{ 
    refresh_your_data() 
    if(listview.getadapter()==null) 
    // create the adapter 
    } 
    else 
    { 
     adapter.notifydatasetchanged(); 
    } 
}