我有一个listfragment和类似Instagram的照片供稿。如何保留列表视图的位置,以便下次应用程序启动时,它会显示listview的确切位置和原样?
编辑:我打算在onPause中写入listview的sharedPreferences位置,然后通过setSelectionFromTop(int position,int y)将它们设置为onCreate并设置listview的位置。但后来我不知道如何获得y。如果我将y = 0,则首先看到该位置的视图,即在屏幕顶部。但情况并非总是如此。视图可能会在上次屏幕中间留下
答案 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) {
...
}
注意:
onScroll
方法中的sharedPreferences。getListView
方法。listview.setSelection
方法在Listview中设置某个行位置,这就足够了。答案 1 :(得分:0)
请记住,在Android中,您完全不知道应用何时关闭,因为没有可以为此目的收听的事件。
因此,您应该定期(或在您的滚动侦听器中)继续在列表视图中以共享首选项(理想情况下在后台线程上允许平滑滚动)或内部数据库中写入可见项的位置,然后应用程序启动时,检查值并正确定位列表视图。
我认为没有任何其他方法可以实现您的目标。