我有一个ListView和两种情况:
setStackFromBottom(false)
1)当我到达底部时,我使用Parceable currentScrollState = lv.onSaveInstanceState();
来保存ListView
的状态。然后加载了一些更多的数据,Adapter的数据集发生了变化,我使用lv.onRestoreInstanceState(currentScrollState);
来保持滚动状态等于其先前的状态。这很好。
2)然而,当我使用setStackFromBottom(true)
时,这不起作用,而ListView
总是在适配器数据集更改后滚动到其下边缘。
我试图记录它的状态,发现第一种情况保存得正确:
AbsListView.SavedState{4260fed0 selectedId=-9223372036854775808 firstId=10 viewTop=-112 position=10 height=1497 filter=null checkState=null}
AbsListView.SavedState{4263cad8 selectedId=-9223372036854775808 firstId=30 viewTop=-114 position=30 height=1497 filter=null checkState=null}
AbsListView.SavedState{428ba9e0 selectedId=-9223372036854775808 firstId=50 viewTop=-102 position=50 height=1497 filter=null checkState=null}
使用setStackFromBottom(true)
时,ListView
无法正确保存状态:
AbsListView.SavedState{4262c808 selectedId=-9223372036854775808 firstId=-1 viewTop=0 position=0 height=1497 filter=null checkState=null}
AbsListView.SavedState{428ac3b8 selectedId=-9223372036854775808 firstId=-1 viewTop=0 position=0 height=1497 filter=null checkState=null}
问题:如何在使用ListView
时保存/恢复setStackFromBottom(true)
的滚动状态?
答案 0 :(得分:1)
尝试ListView:getFirstVisiblePosition()
并使用ListView:setSelection()
恢复。