Android 在 ViewPager 上保留片段

Android retain fragments on ViewPager

在我的 activity 中,我有 ViewPager,它为两个 fragments 实现,在这些片段中,我有一些弹出窗口,例如在旋转设备上弹出窗口再次启动的对话框,这个弹出窗口在 createview 上,在 运行 parent activity 之后,我从服务器获取了一些数据,如何保留这些片段,以便在更改设备方向时不再加载?

Activity:

private void setupViewPager(ViewPager viewPager) {
    adapter = new RegisterViewPagerAdapter(getSupportFragmentManager());

    //adapter.addFragment(new FragmentEmpty());
    adapter.addFragment(FragmentCheckValidationCode.getInstance());
    adapter.addFragment(FragmentRegisterPhoneNumber.getInstance());

    viewPager.setOffscreenPageLimit(1);
    viewPager.setAdapter(adapter);
    registerPages.setCurrentItem(1);
    registerPages.setPageMargin(50);
    registerPages.setScrollDurationFactor(5);
}

片段:

public static FragmentCheckValidationCode getInstance() {
    if (instance == null) {
        instance = new FragmentCheckValidationCode();
    }
    return instance;
}

FragmentCheckValidationCode:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //@formatter:off
        activity                  = getActivity();
        context                   = getActivity().getBaseContext();
    //@formatter:on

    setRetainInstance(true);
}

在片段的 onCreate 中使用 setRetainIntanse(true);

@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Retain this fragment across configuration changes.
    setRetainInstance(true);

  }

参考here

如果您不为横向模式使用不同的布局,您可以添加标签

android:configChanges="orientation|screenSize|keyboardHidden"

到您的清单中的 Activity。这告诉系统您自己处理配置更改。