在哪种情况下我们想添加没有容器的片段?

时间:2015-12-14 08:28:03

标签: android android-fragments

片段事务有方法add(Fragment fragment, String tag),它不会将片段放到容器中,因此它不能有视图。它可以用什么?

5 个答案:

答案 0 :(得分:13)

来自Android文档:

  

但是,片段不需要是活动布局的一部分;您也可以使用没有自己的UI的片段作为活动的隐形工作者。

这个目的怎么样?

简单示例:Activity启动AsyncTask,但当设备轮换activity重新启动时,导致AsyncTask失去与UI线程的连接。但是这个Activity可以保存Fragment(不可见,根本没有UI),可以处理所有AsyncTask工作。当Activity重新创建时,Android操作系统会重新连接Fragment,因此不会发生数据丢失。

答案 1 :(得分:4)

对于对话框,您在普通应用层上没有任何容器。它使用WindowManager直接添加到Window上(有关各种类型的图层,请参阅WindowManager.LayoutParams。)

DialogFragment有一个类似DialogFragment.html#show(android.app.FragmentManager, java.lang.String)的API,与此对应。

答案 2 :(得分:2)

正如@Lucius Hipan所提到的,它可以用来防止数据丢失。 几乎总是这个片段之王被用作保留容器(在onCreate方法中调用setRetainInstance(true)),然后在设备配置改变(例如方向改变)之后片段将不会被重新创建但是会记住先前的状态。 建议使用asynctask的方法。

以下是一个例子:

有登录活动。用户输入其凭据并按下“登录”按钮。发生配置更改后(用户旋转电话)。因此,网络任务已完成,但您的处理程序现在没有收听它。如果您显示任何登录动画,它可以通过savedInstance存储,但听众不能。而不是创建服务,您可以简单地创建具有持久性asynctask和接口的新保留片段以与活动进行通信。

对于小型项目来说,这种方法是一个很好的折衷方案,因为使用总线库是多报多少。

答案 3 :(得分:2)

您可以使用没有UI(容器)的片段作为后台工作者(一个好处是您可以在旋转期间保留它等)以及在旋转和其他更改期间保留数据。

强烈建议阅读http://developer.android.com/guide/components/fragments.html

实例保留示例:https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.java

此外,这里有类似的问题(因此这些问题似乎是重复的,但由于赏金而无法标记):

答案 4 :(得分:1)

通过调用方法add(Fragment fragment, String tag),内部调用add(int containerId, Fragment fragment, String tag)并使用0 containerId。这将是add(0, fragment, tag). 如果containerId提供0,则不会将片段放在容器中。