首页 > 解决方案 > 旋转后的未知片段

问题描述

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

在轮换时,我偶然发现NullPointerException了方法中的onActivityCreated()a 指示缺少注入,这是我在调用new. 我怀疑该片段不是由我的代码创建的,并通过记录hashCode(). 看起来像一个片段是由系统在旋转时自动创建的。

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

标签: androidandroid-fragmentsrotation

解决方案


它从何而来?它是由片段管理器创建的吗?

在 Activity 重新创建时,Android 将恢复 Activity 的 Fragment Manager 中已经存在的 Fragment

我应该如何正确使用它?

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)


推荐阅读