我有一个ViewPager
,里面有Fragment
s。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;
}
并在onCreate()
方法中获取带有getArguments()
的参数并对其进行处理以初始化片段中所需的任何内容。
这样,当您的片段在配置更改时重新创建时,参数将被保留,并且Fragment
在调用其onCreate()
方法时会自行处理。
如果您使用的是最新工具,您可能已经注意到相同的 lint 警告。