旋转后的未知片段
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)
获取片段实例
在我的应用程序中,我使用关键字 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)