android - 旋转后的未知片段
问题描述
在我的应用程序中,我使用关键字创建一个片段并将new
其设置为FragmentTransaction
.
在轮换时,我偶然发现NullPointerException
了方法中的onActivityCreated()
a 指示缺少注入,这是我在调用new
. 我怀疑该片段不是由我的代码创建的,并通过记录hashCode()
. 看起来像一个片段是由系统在旋转时自动创建的。
- 它从何而来?
- 它是由片段管理器创建的吗?
- 我应该如何正确使用它?
- 如何访问它以设置缺失值?
现在我通过测试空值来忽略它,在这种情况下onActivityCreated()
什么都不做。而是使用我创建的片段new
。但是,扔掉一个已经创建的对象,这并不会让人感到很满足。
解决方案
它从何而来?它是由片段管理器创建的吗?
在 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)
推荐阅读
- r - ggplot2 图例顺序 - 多个映射?
- c - 为什么在任意内存位置设置值不起作用?
- django - 无法将方法作为 POST 从 django 模板传递到 django 视图
- r - 有没有办法改变在ggplot的计算字段上显示为条形图数据标签的有效数字的数量?
- java - 如何仅打印最大键值?
- android - Android - TextureView + SurfaceHolder.Callback
- javascript - 如何在 SQL 中替换 json 字符串中的数字数组?
- java - 如何配置测试套件始终将常量注入到所有类实例的@value私有字段中
- c# - 将文件上传到 WindowsForms C# 中的 Rest API
- java - 带有实体列表的 Android Room IN 条件