在android中保存ListView状态

时间:2014-02-07 08:28:24

标签: android listview

我的主页面中有一个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行没有返回任何状态。(它给出一个空值)。 如何解决这个问题?

感谢。

2 个答案:

答案 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);

我希望这就是你想要的一切。