我有一个ViewPager
容纳Fragment
。 ViewPager
的适配器为FragmentStatePagerAdapter
适配器的getItem
方法。
@Override
public Fragment getItem(int position) {
String text= dbHelper.getText(position);
CustomFragment frg = new CustomFragment(text);
return frg;
}
我正在适配器的
getItem
方法中初始化片段。一切正常。
但是,当方向改变时,而不是还原我的初始化片段,而是使用默认构造器
CustomFragment
创建CustomFragment
。因此,这将创建带有伪数据的片段。这是什么原因呢?
如何还原以前创建的片段?
最佳答案
初始化Fragment
的理想方法是创建一个工厂方法,例如:
public static CustomFragment newInstance(String text) {
Bundle arguments = new Bundle();
arguments.put("someText", text);
CustomFragment fragment = new CustomFragment();
fragment.setArguments(arguments);
return fragment;
}
并在
getArguments()
方法中使用onCreate()
获取参数并对其进行处理以初始化片段中所需的内容。这样,当在配置更改时重新创建片段时,参数将保留,并且
Fragment
在调用其onCreate()
方法时会自行照顾自己。如果您使用的是最新工具,则可能已经注意到了相同的棉绒警告。