【发布时间】:2016-01-22 18:30:21
【问题描述】:
我的 Android 平板电脑应用的布局由项目列表和详细信息视图组成。选择列表项后,相关内容将显示在详细信息视图中。
+--------+-------------+
| Item 1 | |
+--------+ Item |
| Item 2 | details |
+--------+ |
| Item 3 | |
+--------+-------------+
详细信息视图是Fragment,它以编程方式扩展为FrameLayout 占位符:
<FrameLayout
android:id="@+id/detail_fragment_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent">
这里是Fragment 操作:
getSupportFragmentManager()
.beginTransaction()
.replace(containerViewId, fragment, fragmentTag)
.addToBackStack(backStackStateName)
.commit();
当用户选择一个又一个项目时,DetailsFragment 的多个实例 [Dx] 被添加到 backstack。
[D3]
[D2] [D2]
[D1] -> [D1] -> [D1]
因此,用户需要多次按下BACK按钮才能将实例从backstack中弹出来清空详情视图。
当现有fragment 的fragmentTag 与新fragment 的fragmentTag 匹配时,如何替换后台堆栈上的DetailsFragment 现有实例[Dx]?
[D1] -> [D2] -> [D3]
【问题讨论】:
-
如果栈顶有相同的标签,你想只替换顶部的片段还是替换堆栈上具有相同标签的任何片段?
-
@Michael 如果有一组具有相同标签的片段又名。堆栈顶部的相同类型我想用传入的单个片段来减少/替换它们。
-
没有简单的方法可以实现这一点。检查这个答案stackoverflow.com/a/22125826/1320616
-
尝试查找当前的详细信息片段,先将其删除,然后将新的详细信息片段添加到同一容器中。
标签: android android-fragments back-stack fragmentmanager