旋转后的未知片段

Unknown fragment after rotation

在我的应用程序中,我使用关键字 new 创建了一个片段,并将其设置为 FragmentTransaction

轮换时,a 偶然发现方法 onActivityCreated() 中的 NullPointerException 表示缺少注入,这是我在调用 new 之后所做的。我怀疑该片段不是由我的代码创建的,并通过记录 hashCode() 证明了这一点。好像是旋转时系统自动生成的片段

现在我通过测试空值来忽略它,在这种情况下 onActivityCreated() 什么都不做。而是使用我用 new 创建的片段。然而,扔掉一个已经创建的对象,这感觉并不令人满意。

从哪里来的?它是由片段管理器创建的吗?

在 Activity 重新创建时,Android 将恢复 activity 的片段管理器中已经存在的片段

如何正确使用?

public void onCreate(Bundle savedInstanceState){
 if(savedInstanceState == null){
   //activity is created for first time
   //commit the fragment
 }else{
   //Activity is recreated(by means of rotation or something else)
   //Dont commit the fragment, fragmet will be restored by the system
 }
}

如何访问它,设置缺失值?

通常,您必须使用 onSaveInstanceState 方法在片段内部处理此问题。您可以使用 getSupportFragmentManager.findFragmentById(R.id.container)getSupportFragmentManager.findFragmentByTag(tagName)

获取片段实例