轮换后的未知片段

时间:2018-05-04 15:37:59

标签: android android-fragments rotation

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

在轮换时偶然发现方法NullPointerException中的onActivityCreated()表示注射丢失,我在调用new后执行此操作。我怀疑该片段不是由我的代码创建的,并通过记录hashCode()证明了这一点。看起来片段是由系统在旋转时自动创建的。

  • 它来自哪里?
  • 是否由片段管理器创建?
  • 我该如何正确使用它?
  • 如何访问它,设置缺失值?

现在我通过测试null值来忽略它,因为onActivityCreated()什么都不做。而是使用我用new创建的片段。然而,抛弃一个已经创建的对象并不令人满意。

1 个答案:

答案 0 :(得分:0)

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

在Activity娱乐中,Android将恢复活动的片段管理器中已存在的片段

我该如何正确使用它?

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)

来获取片段实例