android - ViewPager - FragmentStatePagerAdapter 和处理旋转

标签 android android-fragments android-viewpager

我有一个 ViewPager,其中包含 FragmentViewPager 有一个适配器 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/

相关文章:

android - fragment 中的 getMapAsync()

android - 如何将消息从 BroadcastReceiver 发送到 Activity 或 fragment

android - 为什么ViewPager向左滚动时颜色过渡动画错误?

java - 在 Android 上从 sdk 22 更新到 23 后出现 FragmentManager 错误

android - Android 中 UIAutomator 测试中的 RunTimeException

android - 如何将 google plus 集成到 Android 应用程序中

Android M 用户权限错误 - 读写

Android 单击 ListViewItem 时加载 fragment

android - 在 fragment 之间滑动时消失的操作栏按钮

Android 视频录制 - mediaRecorder.start 上的 IllegalStateException