Android-onBackPressed不受片段影响

时间:2018-08-15 09:32:00

标签: java android android-fragments android-viewpager android-navigation

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

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

我现在遇到的情况是,在viewpager中的某个片段中执行特定操作时,我会调用一个由主活动实现的回调,然后在帧布局中显示一个片段。

但是现在出现了问题。当我想向后导航或想像我之前描述的那样关闭片段时,什么也没发生。

因此,结论:

  1. 直接从Activity调用的“片段显示到容器”->我可以通过getActivity()。onBackpressed()

  2. 从片段导航回来
  3. “片段显示到容器”从viewpager中的片段调用,然后委派给活动->向后导航或getActivity()。onBackpressed()无效。

所以我的问题是:即使从活动的viewpager中的片段中调用片段,也该如何关闭容器中的片段?

2 个答案:

答案 0 :(得分:1)

可能您正在添加一个片段到后堆栈,所以onBackPressed您应该 pop 来自后堆栈的最后一个片段。

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

答案 1 :(得分:0)

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