如何将listview定位到应用程序销毁之前的确切位置?

时间:2015-04-04 12:24:26

标签: android android-listview android-listfragment

我有一个listfragment和类似Instagram的照片供稿。如何保留列表视图的位置,以便下次应用程序启动时,它会显示listview的确切位置和原样?

编辑:我打算在onPause中写入listview的sharedPreferences位置,然后通过setSelectionFromTop(int position,int y)将它们设置为onCreate并设置listview的位置。但后来我不知道如何获得y。如果我将y = 0,则首先看到该位置的视图,即在屏幕顶部。但情况并非总是如此。视图可能会在上次屏幕中间留下

2 个答案:

答案 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。
  • 当ListFragment被子类化时,可以使用
  • getListView方法。
  • 我使用listview.setSelection方法在Listview中设置某个行位置,这就足够了。
  • 最后,setOnScrollListener具有高效性。我没有注意到任何性能滞后。

答案 1 :(得分:0)

请记住,在Android中,您完全不知道应用何时关闭,因为没有可以为此目的收听的事件。

因此,您应该定期(或在您的滚动侦听器中)继续在列表视图中以共享首选项(理想情况下在后台线程上允许平滑滚动)或内部数据库中写入可见项的位置,然后应用程序启动时,检查值并正确定位列表视图。

我认为没有任何其他方法可以实现您的目标。