後更新「刷新」和「setSelection」的方法在我的ListView
中,我選擇一個項目以「添加收藏夾」,我必須做一些東西的工作,我再次填充數據刷新列表,然後我執行OnScrollListener
使用setSelection(firstVisibleItem)
來設置列表顯示右項上添加。在更新ListView(Android)
有沒有更好的方法來做到這一點。我的意思是像mCursor.requery()
或類似的android APIs?或者任何建議的方式?
後更新「刷新」和「setSelection」的方法在我的ListView
中,我選擇一個項目以「添加收藏夾」,我必須做一些東西的工作,我再次填充數據刷新列表,然後我執行OnScrollListener
使用setSelection(firstVisibleItem)
來設置列表顯示右項上添加。在更新ListView(Android)
有沒有更好的方法來做到這一點。我的意思是像mCursor.requery()
或類似的android APIs?或者任何建議的方式?
嗯,requery()
是重新填充由SimpleCursorAdapter
支持的ListView
的首選方法。在ListView
上調用setSelection()
似乎是確保所需項目可見的好方法。我不清楚OnScrollListener
與這些有什麼關係。
我也必須考慮OnScrollListener! :-) 但我猜**這裏的含義是,通過使用此偵聽器並記住通過'firstVisibleItem'來的最後一個值,並在重新定位時使用** this **值,更新數據後所有內容看起來都一樣! – Zordid 2010-02-25 12:48:18
如果你只是打電話setSelection()
,這將使你的項目顯示不自然地。例如,如果您的項目在屏幕的「中間」處可見並且其位置是8.當您添加收藏夾,刷新數據,setSelection(8)項目將顯示在屏幕的「頂部」(而是在'中間')。
所以,那爲什麼我用OnScrollListener
得到firstVisibleItem
並且用這個值來設置位置。它使項目自然顯示。這是函數:
public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){}
我認爲它與任何人誰在ListView
更新數據經常發生。我希望有人能分享這個問題的經驗。
mListActivity.runOnUiThread(
new Runnable() {
public void run() {
x.setSelection(x.getCount());
}
}
);
要顯示所選擇的項目,而在中間比在我ListView
頂部,我用setSelectionFromTop()
:
getListView().setSelectionFromTop(pos, getListView().getHeight()/2);
當然,你可以額外減去一半的單元佈局的高度,從分割上面來正確地選擇中間的選擇。
將高度除以2不會使項目居中,而是將項目的頂部開始放到一半,從而給出將項目放在列表中的感覺。我通常減去半行高度,或者如果視圖高度很難建立,則除以2.5或3。 – Lmickos 2013-12-05 10:19:11
這是大家都在找什麼:
onResume()
{
refresh_your_data()
if(listview.getadapter()==null)
// create the adapter
}
else
{
adapter.notifydatasetchanged();
}
}
我感興趣的是這個問題的答案;我也有類似的問題 – I82Much 2009-10-26 15:12:46