如何将列表视图定位到应用程序销毁之前的确切位置?
Posted
技术标签:
【中文标题】如何将列表视图定位到应用程序销毁之前的确切位置?【英文标题】:How to position listview to exactly where it was left of before app destruction? 【发布时间】:2015-06-09 09:08:40 【问题描述】:我有一个列表片段和类似 instagram 的照片供稿。如何保留列表视图的位置,以便下次应用启动时它会准确显示列表视图的位置和位置?
编辑:我打算在 onPause 中写入 listview 的 sharedPreferences 位置,然后通过 setSelectionFromTop(int position, int y) 让它们 onCreate 并设置 listview 的位置。但是我不知道如何获得y。如果我设置 y = 0,那么首先会看到该位置的视图,即在屏幕顶部。但这并不一定总是如此。上次视图可能会留在屏幕中间
【问题讨论】:
【参考方案1】:我认为获取Listview位置最准确的方法是从setOnScrollListener:
ListView listview = getListView();
listview.setOnScrollListener(new AbsListView.OnScrollListener()
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
...
注意事项:
将 firstVisibleItem 值保存到onScroll
方法中的 sharedPreferences 中。
getListView
方法可以在 ListFragment 子类化时使用。
我用listview.setSelection
方法在Listview中设置了某个行位置,就够了。
最后,setOnScrollListener 是高效的。我没有发现任何性能延迟。
【讨论】:
【参考方案2】:请记住,在 android 中,您将完全不知道应用何时关闭,因为您无法为此目的监听任何事件。
因此,您应该定期(或在您的滚动监听器中)在共享首选项(理想情况下在后台线程上以允许平滑滚动)或内部数据库中继续写入列表视图中可见项目的位置,然后当应用程序启动时,检查值并正确定位您的列表视图。
我认为没有其他方法可以完成您正在寻找的东西。
【讨论】:
我打算在 onPause 中写入 listview 的 sharedPreferences 位置,然后通过 setSelectionFromTop(int position, int y) 让它们 onCreate 并设置 listview 的位置。但是我不知道如何获得y。如果我设置 y = 0,那么首先会看到该位置的视图,即在屏幕顶部。但这并不一定总是如此。上次视图可能会留在屏幕中间 我不会这样做。假设您的列表视图中有 100 个项目,“最后浏览的项目”是第 98 个项目,id=12345
。我要保存的是12345
(我正在显示的视图的 ID),然后当用户打开屏幕时,搜索我的列表,找到具有该 ID 的项目的位置,然后设置选择listview 到那个。你应该使用setSelection(position)
而不是setSelectionFromTop()
是的,但是这将在屏幕的最开始显示 id 为 12345 的项目,而在应用程序被销毁之前,该项目可能已经靠近屏幕的中间或底部或其他任何地方。
以上是关于如何将列表视图定位到应用程序销毁之前的确切位置?的主要内容,如果未能解决你的问题,请参考以下文章
加载数据源后,如何将 HTML 元素添加到 kendo ui 的列表视图中的特定位置?