Android facebook如何保存片段状态(当活动被销毁时)?

Android facebook如何保存片段状态(当活动被销毁时)?,android,facebook,Android,Facebook,我从中得到了“要在活动被破坏时保留一个片段,以便它自动重新访问,您应该调用'fragment.setRetainInstance(true)'” 但是,, 他们没有在片段的构造函数中使用此方法,但仍然能够在oncreate中保留片段 他们这样做的准则是 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState ==

我从中得到了“要在活动被破坏时保留一个片段,以便它自动重新访问,您应该调用'fragment.setRetainInstance(true)'”

但是,, 他们没有在片段的构造函数中使用此方法,但仍然能够在oncreate中保留片段 他们这样做的准则是

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

if (savedInstanceState == null) {
    // Add the fragment on initial activity setup
    mainFragment = new MainFragment();
    getSupportFragmentManager()
    .beginTransaction()
    .add(android.R.id.content, mainFragment)
    .commit();
} else {
    // Or set the fragment from restored state info
    mainFragment = (MainFragment) getSupportFragmentManager()
    .findFragmentById(android.R.id.content);
}
}


有人知道他们使用什么技巧来保留片段而不使用setretaininstance吗?

没有技巧,
片段管理器负责管理片段,它保留使用片段事务添加的片段列表并处理后堆栈。当方向发生更改时,将自动重新创建这些片段,以便重新创建视图层次结构,与方向更改之前一样。请记住,这些重新创建的片段是新实例。如果bundle不为null,您需要做的就是避免创建片段,因为将自动重新创建片段。您可以向FragmentManager请求对片段的引用:

mainFragment = (MainFragment) getSupportFragmentManager()
    .findFragmentById(android.R.id.content);

现在,当您设置
setRetainInstance(true)
时,当发生方向更改时,片段不会被销毁(不会调用onDestroy()),并且在方向更改后,片段的完全相同实例将被附加到新活动(onCreate()不会被调用,因为片段从未被销毁)。这很有帮助,因为实例保留了方向更改期间的所有数据

谢谢,这是有意义的,如果您想跟踪某个片段的实例,那么可以调用setRetainInstance,否则不需要这样做