gpt4 book ai didi

android - 在不弹出的情况下清除 Android Fragment 返回堆栈?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:52 29 4
gpt4 key购买 nike

我们有一个包含滑动菜单 (https://github.com/jfeinstein10/SlidingMenu) 的 Activity ,其中有三个选项,我们称它们为 A、B1、C1。这些对应于我们在 Activity 中显示的 fragment 。当您从 SlidingMenu 选择不同的选项时,我会通过 FragmentManager 将当前 fragment 替换为新 fragment 。

您可以从 Fragment B1 转到另外两个,我们称它们为 B2 和 B3。这里我们希望返回键带你从 B2 -> B1 或 B3 -> B1,所以我调用 transaction.addToBackStack(null)。如果我们在 B2 或 B3 上从 SlidingMenu 中选择一个选项,我们想要清除返回堆栈,因此我使用此问题中建议的代码 Clear back stack using fragments它会调用 popBackStack() 直到清除。

到目前为止一切顺利。

您可以从 Fragment C1 转到 Fragment C2。由于 C1/C2 更像是我使用的主/细节设计

fragmentTransaction.setCustomAnimations(R.animator.slide_in_from_right,
R.animator.slide_out_to_left, R.animator.slide_in_from_left,
R.animator.slide_out_to_right);

添加一个幻灯片动画,其中 C1 从左侧滑出,而 C2 从右侧滑入,反之亦然。在 C2 上按返回键将我们带回 C1,并带有反向动画,一切都很好。

但是

如果您从 SlidingMenu 中选择 A 或 B1,然后我们 popBackStack() 从返回堆栈中删除 C1,然后它会将 C2 滑出到右侧,这看起来很奇怪。我想做的是在不运行动画的情况下清除后退堆栈,但我找不到这样做的方法。我试过调用 popBackStackImmediate(),但这似乎没有任何区别。

作为替代方案,我想我可以完全避免调用 addToBackStack,而是通过 Activity.onBackPressed() 手动处理用户按下返回键,但也许有一个我看不到的解决方案?

最佳答案

你可以试试下面的方法,虽然我不熟悉 .remove() 看起来它应该做你想做的事:

myFragmentClass myFragC1 = (myFragmentClass) getFragmentManager().findFragmentByTag("theTagYouUsedWhenAddingToBackStack");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.remove(myFragC1);
transaction.commit();

关于android - 在不弹出的情况下清除 Android Fragment 返回堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236078/

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