【发布时间】:2015-07-17 09:52:45
【问题描述】:
我有主要活动和 2 个片段,片段 1 调用片段 2 当我从内置的 android 按钮中单击后退按钮时,它会调用我在主要活动中覆盖的 onBackPressed 函数并退出应用程序。 我希望当我单击片段 2 时,不会调用主要活动的 onBackPressed,它会将我返回到片段 1。 操作栏的后退按钮效果很好(我认为这意味着后退是可以的)。
我尝试过:
getActivity().getSupportFragmentManager().beginTransaction().addToBackStack("Messages");
关于片段 2
并尝试添加
getSupportFragmentManager().popBackStack();
到主要活动的onBackPressed() 它什么也没做 谢谢
编辑:
I am trying to do
public void onBackPressed() {
// getSupportFragmentManager().popBackStack();
android.support.v4.app.Fragment fragment2 = getSupportFragmentManager().findFragmentByTag(null);
if (fragment2 != null && fragment2.isVisible()) {
getSupportFragmentManager().popBackStack();
return;
}
在任何演出之前
getSupportFragmentManager().beginTransaction().addToBackStack(null).commit();
tr.show(Fragment2);
但在 findFragment(null) 上得到了 null
编辑: 我检查了 getSupportFragmentManager().beginTransaction().mTail.fragment 并看到该值是我想要显示的片段 1,但是当我执行 getSupportFragmentManager().popBackStack();它没有任何作用。
【问题讨论】:
-
我认为默认情况下,当 addBackStack 时,Os 将执行您期望的相同行为,而不会覆盖 onBackPressed。也许你在其他地方错误地实现了,你能发布更多的代码吗?
-
@Minhtdh 是对的。您遇到任何错误吗?
-
不,没有任何错误,而且代码很多,所以这是个问题,但我用更多信息编辑了帖子
-
好吧,我想是因为 getSupportFragmentManager().beginTransaction().addToBackStack(null).commit();当您调用此代码时,它将添加一个没有 UI 的 backstack。因此,如果您不覆盖 onBackStack,您可以在 2 次后按后返回到您的第一个片段。什么是“tr”变量?
-
我没有 onBackStack 调用,它是:final FragmentTransaction tr = getSupportFragmentManager() .beginTransaction();
标签: java android android-fragments android-activity