在应用程序从后台返回后处理来自片段的回按

问题描述

我想在活动的(Java)片段之一(Kotlin)中处理用户回按。

在活动的 onCreate 方法中我调用

OnBackpressedCallback onBackpressedCallback = new OnBackpressedCallback(true) { 
(...) handling back press when there's other BackpresseddispatcherCallbacks registered (...)
}
getonBackpresseddispatcher().addCallback(this,onBackpressedCallback);

然后在我想要处理后按的片段的 onCreateView() 中,我调用

activity?.onBackpresseddispatcher?.addCallback(viewLifecycleOwner,object : OnBackpressedCallback(true) {
override fun handleOnBackpressed() {
(...) handling back press here,not in activity (...)
}})

一切都按预期进行,直到我将应用程序置于后台,然后返回前台,导致 OnStop -> Activity 和 Fragment 的 OnStart 被调用

在这种情况下,应用程序会忽略 Fragment 回调并且正在调用 Activity 的回调。

我发现的是那个

  1. onBackpresseddispatcher 以与添加回调相反的顺序调用回调。仅当最近添加的回调未启用时,才会调用任何先前添加的回调(仅调用最后启用的回调)

  2. 向 Activity 和 Fragment 生命周期添加观察者并记录结果打印:

    片段:ON_START 行动:ON_START FRAG:ON_RESUME 行动:ON_RESUME

OnStart 和 OnResume 上的 Activity 在 Fragments 等价物之后被调用,这有效地使 Activity 的回调成为最后一个活动的回调并接收返回事件而不是片段。

我正在寻找解决方案。我非常感谢任何有关如何推动它的建议。

附注。调用最后一个片段方法(活动片段管理器堆栈上的最后一个)的方法不起作用,因为目前,这些片段不添加后台堆栈对应用程序至关重要。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)