我有一个问题。我有一个片段,其中包含viewpager
。对于viewpager
,我使用FragmentPagerAdapter扩展名。每个recycler views
内都有pager fragment
个。
问题是我无法在recycler views
viewpager
内的屏幕旋转后恢复滚动位置。我认为问题出在recyclerview
,但很快我发现在viewpager
内的屏幕旋转片段正在重新创建之后,即使它们被调用onCreate()
和onDestroy()
不应该。我也尝试使用onSaveInstanceState(bundle)
并发现在onCreateView()
内,此包总是为空。所以我该怎么做?
This主题对我没有帮助。
答案 0 :(得分:3)
好吧,我找到了答案。问题出在我身上)。有层次结构:MainActivity与片段的框架布局 - PagerFragment包含viewpager - viewpager中的fagments。问题是,在活动内部屏幕旋转之后我总是替换PagerFragment,例如:
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragment = new PagerFragment();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
但我应该这样做:
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (fragment == null) {
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragment = new PagerFragment();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
完全是我的错,我很惭愧。对不起。
答案 1 :(得分:0)
您可以使用空状态覆盖PagerAdapter中的功能。
override fun restoreState(state: Parcelable?, loader: ClassLoader?) {
super.restoreState(null, loader)
}
答案 2 :(得分:0)
这两个替代应该可以解决您的问题
在这里保存您的值
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
在这里您可以恢复它
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
}