如何在另一个活动的背面按下片段中保留Recycler视图的滚动位置?

时间:2018-06-08 10:25:58

标签: android android-fragments android-recyclerview

我已经看到这个问题已经回答了save scroll position in an activity

这里的活动

上述解决方案对活动使用onSaveInstanceState()。但对于片段的onSaveInstanceState()来说,这对我来说是无用的。我正在使用带有片段的ViewPager

2 个答案:

答案 0 :(得分:0)

我假设你在片段里面使用了recyclelerView。要在此保留您的滚动位置,您应该做什么:

  1. 在您的Activity ex中声明一个静态变量。 public static int currentVisiblePosition = 0; 并在片段RecyclerView.LayoutManager layoutManager;

  2. 中声明layoutManager
  3. 在片段的OnPause()中写

     @Override
        public void onPause() {
            super.onPause();
            try{
                MainActivity.currentVisiblePosition = ((LinearLayoutManager)layoutManager).findFirstCompletelyVisibleItemPosition();
            }
            catch (NullPointerException ne)
            {
                ne.printStackTrace();
            }
        }
    
  4. 当您按下后退按钮并希望在此处向用户显示最后显示的recyclerView项目时,您应该在下载代码的位置添加以下代码

        if(MainActivity.currentVisiblePosition > 0)
                        {
                            ((LinearLayoutManager) layoutManager).scrollToPosition((int) MainActivity.currentVisiblePosition);
                            MainActivity.currentVisiblePosition = 0;
                        }
    
  5. 这将显示在移动到下一个活动或片段之前存在的项目。

    感谢阅读...快乐编码...... !!!

答案 1 :(得分:0)

您可以使用的选项是通过在片段onCreate()中设置以下内容来保留片段的实例:

setRetainInstance(true)

这意味着此片段将保留其实例以及分配给它的所有变量值。这允许您使用这些值而不会重复onSavedInstance。所以基本上你需要做的是将当前位置存储在一个变量中。

请注意,由于您要保留一个实例,因此在创建新实例时应该小心验证,以便在您不希望的情况下不要使用多个实例。