我已经看到这个问题已经回答了save scroll position in an activity
这里的活动上述解决方案对活动使用onSaveInstanceState()。但对于片段的onSaveInstanceState()来说,这对我来说是无用的。我正在使用带有片段的ViewPager
。
答案 0 :(得分:0)
我假设你在片段里面使用了recyclelerView。要在此保留您的滚动位置,您应该做什么:
在您的Activity ex中声明一个静态变量。 public static int currentVisiblePosition = 0;
并在片段RecyclerView.LayoutManager layoutManager;
在片段的OnPause()中写
@Override
public void onPause() {
super.onPause();
try{
MainActivity.currentVisiblePosition = ((LinearLayoutManager)layoutManager).findFirstCompletelyVisibleItemPosition();
}
catch (NullPointerException ne)
{
ne.printStackTrace();
}
}
当您按下后退按钮并希望在此处向用户显示最后显示的recyclerView项目时,您应该在下载代码的位置添加以下代码
if(MainActivity.currentVisiblePosition > 0)
{
((LinearLayoutManager) layoutManager).scrollToPosition((int) MainActivity.currentVisiblePosition);
MainActivity.currentVisiblePosition = 0;
}
这将显示在移动到下一个活动或片段之前存在的项目。
感谢阅读...快乐编码...... !!!
答案 1 :(得分:0)
您可以使用的选项是通过在片段onCreate()
中设置以下内容来保留片段的实例:
setRetainInstance(true)
这意味着此片段将保留其实例以及分配给它的所有变量值。这允许您使用这些值而不会重复onSavedInstance
。所以基本上你需要做的是将当前位置存储在一个变量中。
请注意,由于您要保留一个实例,因此在创建新实例时应该小心验证,以便在您不希望的情况下不要使用多个实例。