Jul*_* A. 11 lifecycle android transactions fragment android-activity
在Android文档中使用片段的示例中,当应用程序处于"双视图"模式时,只要应用程序需要显示不同标题的详细信息,就会重新创建详细信息片段. FragmentTransaction.replace()
用于将每个旧的详细信息片段实例换成新的.
这是推荐的做法吗?当真正的意图(没有双关语意图)要更新UI显示的内容而不是UI本身时,创建新的UI实例并不浪费.在我看来,创建新实例的唯一原因是,如果有人打算将它们添加到backstack,那么用户可以回溯步骤.否则,直接更新片段是否安全/可取?
在该示例的情况下,它将意味着一种方法DetailsFragment.setShownIndex()
.这将被调用,传入新的标题索引,而不是重新创建DetailsFragment
.
假设我们有一个示例版本,其中一个活动管理两个片段,但一次只显示一个片段,根据需要交换每个片段.活动是否可以创建每个片段的实例,保留对每个片段的引用,然后根据需要简单地添加或删除这两个实例?
这可能是粘性的一个结果是,当标题片段处于resumed
状态(即在"前景"中)时,选择标题将导致在DetailsFragment.setShownIndex()
细节片段处于stopped
状态时进行调用.
好主意?馊主意?
提前致谢.
就像你说的,创建新Fragment实例的主要原因是为了便于使用后端堆栈.这也是绝对安全的重用现有的片段(寻找它使用两种FragmentManager.findFragmentById()
或FragmentManager.findFragmentByTag()
).有时候,你需要好好利用的片段的方法,如isVisible()
,isRemoving()
等让你不非法引用UI组件时DetailsFragment
是stopped
.
无论如何,在您建议的带有2个片段的单窗格活动中,您的setShownIndex
方法可以设置一个私有字段,DetailsFragment
其中加载了onCreateView
或onActivityCreated
.
例如,
DetailsFragment df = getFragmentManager().findFragmentByTag("details");
if (df != null) {
df.setShownIndex(getSelectedIndex());
} else {
df = DetailsFragment.newInstance(getSelectedIndex());
}
fragmentTransaction.replace(R.id.frame, df, "details").commit();
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,DF是否新建或重新使用,onCreateView
并且onActivityCreated
将被调用时,DetailsFragment
被添加到容器中.
但是如果你想要一个后台堆栈,我强烈建议你只创建新实例,否则你只是为了实现自己的内容而实现自己的后台堆栈DetailsFragment
.
归档时间: |
|
查看次数: |
7494 次 |
最近记录: |