从文档开始:
public void setRetainInstance(布尔保留)
控制片段实例是否在activity重新创建过程中保留(例如从配置更改)。这只能与不在后堆栈中的碎片一起使用。如果设置,则在重新创建activity时,片段生命周期将略有不同:
我有些问题:
>
片断是否也保留它的视图,还是在配置更改时重新创建它?“保留”到底是什么意思?
当用户离开activity时,碎片会被销毁吗?
为什么它对后面堆栈上的碎片不起作用?
在哪些用例中使用这种方法是有意义的?
首先,看看我关于保留片段的帖子。也许会有帮助。
现在回答大家的问题:
片断是否也保留其
视图
状态,还是在配置更改时重新创建它--什么是“保留”?
是的,片段
的状态将在整个配置更改过程中保留。具体地说,“保留”意味着片段不会在配置更改时被销毁。也就是说,片段
将被保留,即使配置更改导致底层activity
被破坏。
当用户离开activity时,碎片会被销毁吗?
就像activity
s一样,片段
s在内存资源不足时可能会被系统破坏。当您离开activity
时,是否让片段在配置更改过程中保留其实例状态,对系统是否会破坏片段
没有影响。如果您保留activity
(即通过按home按钮),片段
可能会被销毁,也可能不会被销毁。如果您通过按下后退按钮离开activity
(因此调用finish()
并有效地销毁activity
),则所有activity
附加的片段
也将被销毁。
为什么它对后面堆栈上的碎片不起作用?
不支持它可能有多种原因,但对我来说最明显的原因是activity
持有对FragmentManager
的引用,而FragmentManager
管理背栈。也就是说,无论您是否选择保留片段
,activity
(因此FragmentManager
的后座堆栈)都将在配置更改时被销毁。另一个可能不起作用的原因是,如果允许保留的片段和非保留的片段同时存在于同一个backstack上,事情可能会变得棘手。
在哪些用例中使用这种方法是有意义的?
保留的片段对于跨activity实例传播状态信息(特别是线程管理)非常有用。例如,片段可以充当thread
或asynctask
实例的宿主,管理其操作。有关更多信息,请参阅我关于此主题的博客文章。
通常,我将类似于使用onConfigurationChanged
和activity
...不要仅仅因为你懒得正确地实现/处理一个方向改变,就把它当作一个绷带。只有在需要的时候才用。
我使用的是支持片段,在片段中我设置了setRetainInstance(true)。我了解到,如果我们在片段中设置了setRetainInstance(true),那么在配置更改时不会调用片段的onCreate()和onDestroy()。但当我在samsung note3中更改字体样式时,仍然会重新创建活动,并调用fragment的onCreate()。这是配置更改吗?如果是,为什么片段实例被初
在我的应用程序中,我使用了一个活动和两个片段。该应用程序使用带有容器的布局,因此片段是通过事务添加的。第一个片段包含列表视图,另一个片段包含列表视图项的详细视图。两个片段都使用setRetainInstance(true)。片段是通过替换事务添加的,并设置了addToBackStack(null)。列表片段包含一个实例变量,其中包含列表的一些信息。现在我正在切换到详细并按回,实例变量为null。我
我已经使用Android ADT几个星期了,我曾经通过转到:文件来创建新活动 当我选择“新建空白活动”并单击“下一步”时,会显示一个我必须填写的新表格,标题为“片段布局名称”。为什么这突然出现,有谁知道为什么我被迫创建一个片段布局,因为我甚至不想使用它。我还记得我的一个朋友说他大约一周前更新了他的SDK,他说他有同样的问题。我是否应该在XML文档加载后删除其中的片段,或者有没有一种方法可以禁用它,
我正在基于模板进行查看,但在某些区域我想输入片段。 模板:base。html 查看:列表。html 片段:片段/init.html 对于头部碎片,它可以正常工作。但在页脚中,但在页脚中,将显示模板的代码。 输出: 我希望你能帮助我。提前感谢。 使现代化 基础html 列表html init.html 输出: 我设法在页脚中包含代码片段,但我的目标是替换它。 解决方案:
考虑下面的代码片段 在代码片段1中,方法m1()在抛出声明中有SQLExctive,但它实际上抛出了类型为的引用变量。我在这里期待编译器出错,因为
主要活动: } 片段类 错误:java.lang.runtimeException:无法启动活动ComponentInfo{com.darkweb.android.chroma2018/com.darkweb.android.chroma2018.mainactivity}:Android.view.filflateException:二进制XML文件行#0:错误inflating类在Androi