我有一个 ViewPager
,其中包含 Fragment
。 ViewPager
有一个适配器 FragmentStatePagerAdapter
适配器的 getItem
方法。
@Override
public Fragment getItem(int position) {
String text= dbHelper.getText(position);
CustomFragment frg = new CustomFragment(text);
return frg;
}
我正在适配器的 getItem
方法中初始化 fragment 。
一切正常。
然而,当方向发生变化时,CustomFragment
不是恢复我初始化的 fragment ,而是使用 CustomFragment
的默认构造函数创建的。所以这会创建带有虚拟数据的 fragment 。
这是什么原因呢? 如何恢复以前创建的 fragment ?
最佳答案
初始化 Fragment
的理想方法是创建一个工厂方法,例如:
public static CustomFragment newInstance(String text) {
Bundle arguments = new Bundle();
arguments.put("someText", text);
CustomFragment fragment = new CustomFragment();
fragment.setArguments(arguments);
return fragment;
}
并在 onCreate()
方法中使用 getArguments()
获取参数并处理它以初始化 fragment 中您想要的任何内容。
这样,当您的 fragment 在配置更改时重新创建时,参数将被保留,并且 Fragment
会在其 onCreate()
方法被调用时自行处理。
如果您使用的是最新的工具,您可能已经注意到关于相同内容的 lint 警告。
关于android - ViewPager - FragmentStatePagerAdapter 和处理旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43570098/