我有一个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
。所以这会创建带有虚拟数据的片段。
这是什么原因? 如何恢复以前创建的片段?
答案 0 :(得分:1)
初始化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()
方法时会自行处理。
如果您使用的是最新工具,您可能已经注意到了相同的lint警告。