片段事务有方法add(Fragment fragment, String tag),它不会将片段放到容器中,因此它不能有视图。它可以用什么?
答案 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。
此外,这里有类似的问题(因此这些问题似乎是重复的,但由于赏金而无法标记):
答案 4 :(得分:1)
通过调用方法add(Fragment fragment, String tag)
,内部调用add(int containerId, Fragment fragment, String tag)
并使用0 containerId。这将是add(0, fragment, tag).
如果containerId
提供0,则不会将片段放在容器中。