項目中可能會有這種需求:動態設置ListView顯示的itemide
這種需求可能會出如今不一樣的狀況下,有的是打開頁面就要顯示在特定的位置,也有的是瀏覽列表時實時更新數據而且改變了集合中數據,或者是某種條件觸發而改變顯示的位置,我遇到的就是第二種。post
先說說個人狀況:資源
用ListView展現數據,當上拉或下拉刷新時會增長集合中數據的數量,可是考慮若是item太多可能會太佔資源,因而我就控制了一下集合的長度,每次刷新後若是size超過最大值時我就會從集合中移除一部分數據,可是當我在刷新adapter時問題就出現了,ListView顯示的item直接跳到了頂部或底部,而不是接着刷新以前的位置顯示,緣由我沒有具體研究,多是由於每次調用adapter的刷新時adapter都記住position,刷新後會繼續從記住的position開始展現,但我移除了一部分,從而致使顯示的位置錯亂。get
其實解決辦法很簡單,網上有不少人都碰到了這個問題而且給出瞭解決辦法:it
若是上拉或下拉時,從集合中移除了一部分數據,那麼在刷新以前調用下面的方法就能夠解決問題io
listview.postDelayed(new Runnable() {
@Override
public void run() {List
//上拉時,setSelection(獲取當前展現的第一個item的position 減掉你從集合中移除的數據的數量(a)),這樣在刷新時就會繼續以前的位置顯示
listview.setSelection(listview.getFirstVisiblePosition()
- a + 1);
}方法
//下拉時,setSelection(你從集合中移除的數據的數量(a))數據
listview.setSelection(a);
}, 20);項目