【问题标题】:Saving the ListView state in android在android中保存ListView状态
【发布时间】:2018-02-27 06:41:39
【问题描述】:

我的主页中有一个 ListView (MainActivity.java),我想在用户返回时保留 ListView 的位置(如果向上滚动,我想显示确切的 ListView 位置)到主页。

由于 MainActivity 在用户单击列表项时转到 onPause() -> onStop() 方法, 我将 ListView 的状态保存在 onPause() 中。为了获得返回 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 行 没有返回任何状态。(它给出一个空值)。 如何解决这个问题?

谢谢。

【问题讨论】:

  • 要实现您想要的,您需要获取滚动条的当前位置(或“y”)并将其保存在某处,然后在返回时将滚动条设置为先前保存的位置。
  • @Andy :我在 onItemClick y =list.getScrollY(); 中得到了 y 值并在 onStart() ->list.setScrollY(y) 中设置 y 值;但还是没听懂??

标签: android listview


【解决方案1】:

我用这个:

Parcelable state = listView.onSaveInstanceState();

在添加适配器之前:

listView.onRestoreInstanceState(state);

在设置适配器之后,我得到了您正在寻找的结果。 试试看吧

【讨论】:

  • 你的意思是在 onCreate() 里面??
  • 你在哪里设置你的适配器?如果您在 onCreate() 中执行所有操作,那么我想是的
  • Parcelable state = listView.onSaveInstanceState();应该在 onItemClick 中调用,不是吗?在离开屏幕之前。
  • 不,我在 onItemClick 中没有它。就在它之前
【解决方案2】:

要获取列表视图的当前位置,您必须实现 OnScrollListener 并使用您的列表视图设置监听器,例如,

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

我希望这就是你想要的。

【讨论】:

  • 我没有测试你的方法。但我发现我的 MainActivity.java 类在返回主页时转到 onSaveInstanceState() -> onDestroy() 。那我可以用你的方法吗??我试图在一个包中获取已保存的状态,但它仍然无法正常工作。
  • 我不明白为什么活动正在破坏而不是去 onStart() 方法?有什么想法吗??
  • 是的,您仍然可以使用此方法保存状态。在任何中间类中创建全局静态变量并将您的状态保存在此变量中。尝试将一些您曾经使用过的代码放入另一个活动并返回到 MainActivity 以了解破坏问题。
猜你喜欢
  • 1970-01-01
  • 2016-06-09
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多