gpt4 book ai didi

Android BackStack 抽屉导航

转载 作者:行者123 更新时间:2023-11-29 00:13:49 27 4
gpt4 key购买 nike

过去几天我一直在处理一个问题,但似乎没有找到答案。

描述:我有一个包含抽屉导航的主要 Activity 。抽屉导航的每个项目(单击时)都会创建一个 fragment 。在该 fragment 中,有一个对象的 listView,单击它会创建其他 fragment 。在那些 fragment 中,我有另一个对象 ListView ,它打开其他 fragment 。换句话说,有一系列 fragment 可以打开其他 fragment 。像这样:

http://s22.postimg.org/pddo5gsv5/backstack.png

为了能够返回到每个 fragment ,我实现了 addToBackstack("string") 方法。

我的问题是,如何为我的应用程序实现正确的后台堆栈,以便当我单击抽屉导航项目时,所有已添加到后台堆栈的 fragment 都被清除,而不是抽屉导航项目打开的 fragment 。

如有任何帮助,我们将不胜感激。谢谢!

编辑

好吧,看来我想通了。考虑到我从回复中收到的建议,这是我想出的解决方案:

@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
if (count != 0) {
FragmentManager.BackStackEntry backEntry = getFragmentManager()
.getBackStackEntryAt(
getFragmentManager().getBackStackEntryCount() - 1);
if (backEntry.getName() == NAVIGATION) {
finish();
} else
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}

换句话说:首先,我为顶级 fragment 添加了一个后台堆栈条目,给它们一个特定的标签。我已经覆盖了 Activity 的后退按钮功能,以便当最后一个 backstack 条目是一个顶级 fragment 来完成 Activity 时(这样它就不会简单地将 fragment 从 Activity 中分离出来,让它为空)。否则,如果最后一个条目不是顶级 fragment ,则执行 popBackStack。PS:所有非顶级 fragment 都被添加到带有与顶级标签不同的标签的后台堆栈中。此外,我必须在抽屉导航的点击监听器中执行 POP_BACK_STACK_INCLUSIVE。

getFragmentManager().popBackStack(null,
FragmentManager.POP_BACK_STACK_INCLUSIVE);

谢谢大家的建议,希望这个编辑能帮助其他用户。

最佳答案

您可以使用以下代码来解决您的问题:

getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(fragment_tag)
.commit();

为了使上面的代码正常工作,您必须动态创建 fragment 。因为无法替换硬编码 fragment 。为此,您可以创建一个容器(FrameLayout 等),在我们的示例中该容器的 ID fragment_container。然后,上面的代码将在容器中动态添加 fragment 。最后,您必须将 fragment_tag 作为参数传递给 addToBackStack 方法。这意味着,该交易将被添加到后台堆栈中。最后,为了从后台获取它,您必须使用以下代码:

getFragmentManager().popBackStack(fragment_tag, FragmentManager.POP_BACK_STACK_INCLUSIVE));

POP_BACK_STACK_INCLUSIVE 标志确保“所有匹配的条目都将被消耗,直到找到不匹配的条目或到达堆栈底部。否则,将删除直到但不包括该条目的所有条目。”

关于Android BackStack 抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com