我有一个ViewPager容纳FragmentViewPager的适配器为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()方法时会自行照顾自己。

如果您使用的是最新工具,则可能已经注意到了相同的棉绒警告。

10-06 11:50