Android - onBackPressed 对片段没有影响

Android - onBackPressed has no effect from fragment

我有一个 Activity,里面有一个 viewpager,还有一个 frameLayout,它用作应该在这个 viewpager 上方绘制的片段的容器。

当我单击 Activity 的按钮时,该框架布局容器中会显示一个片段。在导航栏中按下我可以关闭这个片段。当从 activity 本身调用时,所有这些都工作正常。

我现在的情况是,在 viewpager 中的一个片段的特定操作上,我调用了主要 activity 实现的回调,然后在框架布局中显示了一个片段。

但是问题来了。当我想要返回或者更确切地说想要像我之前描述的那样关闭片段时,没有任何反应。

总之:

  1. "Fragment show to container" 直接从 Activity 调用 -> 我可以通过 getActivity().onBackpressed()

    从片段返回
  2. "Fragment show to container" 在viewpager中调用fragment然后委托给activity -> 返回导航或者getActivity().onBackpressed()没有效果.

所以我的问题是:如何关闭容器中的片段,即使我从 activity 的 viewpager 中的一个片段调用它?

可能您正在添加一个片段到后台堆栈,所以onBackPressed您应该从后台堆栈中弹出最后一个片段。

类似的东西: FragmentManager fm = activity.getFragmentManager(); fm.popBackStackImmediate();

同时我发现了问题.. 由于我是 运行 某种更新循环,我多次将片段添加到后台堆栈但没有意识到,因为片段本身没有改变,新实例只是添加到后栈。因此,当我调用 onBackpressed() 方法时,实例已从后台堆栈中删除,但因为其中大约有 200 个实例没有发生任何事情。