android.support.v4.app.Fragment.setRetainInstance()方法的使用及代码示例

x33g5p2x  于2022-01-18 转载在 其他  
字(3.9k)|赞(0)|评价(0)|浏览(133)

本文整理了Java中android.support.v4.app.Fragment.setRetainInstance()方法的一些代码示例,展示了Fragment.setRetainInstance()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Fragment.setRetainInstance()方法的具体详情如下:
包路径:android.support.v4.app.Fragment
类名称:Fragment
方法名:setRetainInstance

Fragment.setRetainInstance介绍

[英]Control whether a fragment instance is retained across Activity re-creation (such as from a configuration change). This can only be used with fragments not in the back stack. If set, the fragment lifecycle will be slightly different when an activity is recreated:

  • #onDestroy() will not be called (but #onDetach() still will be, because the fragment is being detached from its current activity).
  • #onCreate(Bundle) will not be called since the fragment is not being re-created.
  • #onAttach(Activity) and #onActivityCreated(Bundle) will still be called.
    [中]控制是否在活动重新创建期间保留片段实例(例如从配置更改)。这只能用于不在后堆栈中的片段。如果设置,则重新创建活动时片段生命周期将略有不同:
    *#ondestory()将不会被调用(但是#onDetach()仍然会被调用,因为片段正在从其当前活动中分离)。
    *#onCreate(Bundle)不会被调用,因为没有重新创建片段。
    *#onAttach(活动)和#onActivityCreated(Bundle)仍将被调用。

代码示例

代码示例来源:origin: facebook/facebook-android-sdk

protected Fragment getFragment() {
  Intent intent = getIntent();
  FragmentManager manager = getSupportFragmentManager();
  Fragment fragment = manager.findFragmentByTag(FRAGMENT_TAG);
  if (fragment == null) {
    if (FacebookDialogFragment.TAG.equals(intent.getAction())) {
      FacebookDialogFragment dialogFragment = new FacebookDialogFragment();
      dialogFragment.setRetainInstance(true);
      dialogFragment.show(manager, FRAGMENT_TAG);
      fragment = dialogFragment;
    } else if (DeviceShareDialogFragment.TAG.equals(intent.getAction())) {
      DeviceShareDialogFragment dialogFragment = new DeviceShareDialogFragment();
      dialogFragment.setRetainInstance(true);
      dialogFragment.setShareContent((ShareContent) intent.getParcelableExtra("content"));
      dialogFragment.show(manager, FRAGMENT_TAG);
      fragment = dialogFragment;
    } else {
      fragment = new LoginFragment();
      fragment.setRetainInstance(true);
      manager.beginTransaction()
          .add(R.id.com_facebook_fragment_container, fragment, FRAGMENT_TAG)
          .commit();
    }
  }
  return fragment;
}

代码示例来源:origin: grandcentrix/ThirtyInch

/**
 * Don't use <code>setRetainInstance(true)</code>, it's designed for headless Fragments only.
 */
@Override
public void setRetainInstance(final boolean retain) {
  if (retain) {
    throw new IllegalStateException("Retaining TiFragment is not allowed. "
        + "setRetainInstance(true) should only be used for headless Fragments. "
        + "Move your state into the TiPresenter which survives recreation of TiFragment");
  }
  super.setRetainInstance(retain);
}

代码示例来源:origin: JessYanCoding/ArmsComponent

@Override
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
  Timber.i(f.toString() + " - onFragmentCreated");
  // 在配置变化的时候将这个 Fragment 保存下来,在 Activity 由于配置变化重建时重复利用已经创建的 Fragment。
  // https://developer.android.com/reference/android/app/Fragment.html?hl=zh-cn#setRetainInstance(boolean)
  // 如果在 XML 中使用 <Fragment/> 标签,的方式创建 Fragment 请务必在标签中加上 android:id 或者 android:tag 属性,否则 setRetainInstance(true) 无效
  // 在 Activity 中绑定少量的 Fragment 建议这样做,如果需要绑定较多的 Fragment 不建议设置此参数,如 ViewPager 需要展示较多 Fragment
  f.setRetainInstance(true);
}

代码示例来源:origin: noterpopo/Hands-Chopping

@Override
  public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
    // 在配置变化的时候将这个 Fragment 保存下来,在 Activity 由于配置变化重建是重复利用已经创建的Fragment。
    // https://developer.android.com/reference/android/app/Fragment.html?hl=zh-cn#setRetainInstance(boolean)
    // 在 Activity 中绑定少量的 Fragment 建议这样做,如果需要绑定较多的 Fragment 不建议设置此参数,如 ViewPager 需要展示较多 Fragment
    f.setRetainInstance(true);
  }
});

代码示例来源:origin: com.uphyca/android-junit4-robolectric

/**
 * @param retain
 * @see android.support.v4.app.Fragment#setRetainInstance(boolean)
 */
public void setRetainInstance(boolean retain) {
  mFragment.setRetainInstance(retain);
}

代码示例来源:origin: alirezaafkar/SunDatePicker

void switchFragment(Fragment fragment) {
  fragment.setRetainInstance(this.getRetainInstance());
  getChildFragmentManager()
      .beginTransaction()
      .replace(R.id.frame_container, fragment)
      .commit();
  updateDisplay();
}

相关文章

微信公众号

最新文章

更多

Fragment类方法