我的主页面中有一个ListView( MainActivity.java ),当用户回来时,我想保持ListView的位置(如果它向上滚动,我想显示确切的ListView位置)到主页。
由于MainActivity转到onPause() - >用户单击列表项时的onStop()方法, 我在onPause()中保存ListView的状态。为了获得返回 Parcelable 值,我使用一个名为 state 的全局变量。
state = list.onSaveInstanceState(); //line 1
当用户返回MainActivity()时,它会通过onStart(),因此我在onStart()中获取已保存的状态。
if (state != null) {
//set adapter to listview
list.setAdapter(myAdapter);
//Restore previous state
list.onRestoreInstanceState(state);
}
问题是第1行没有返回任何状态。(它给出一个空值)。 如何解决这个问题?
感谢。
答案 0 :(得分:1)
我用这个:
Parcelable state = listView.onSaveInstanceState();
在添加适配器之前:
listView.onRestoreInstanceState(state);
正好在设置适配器后,我得到了您正在寻找的结果。 试试吧
答案 1 :(得分:0)
要获取listview的当前位置,您必须实现OnScrollListener并使用listview设置侦听器,如
listView.setOnScrollListener(this);
然后,在onScroll方法中你可以做你的东西
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int totalVisibleItem, int totalItemInList) {
// TODO Auto-generated method stub
// here you can save listview's scroll state
// you can see methods parameters
}
当你回到主要活动时,你可以使用listview的setSelection方法,比如
listView.setSelection(firstVisibleItem);
我希望这就是你想要的一切。