将手柄向后压在片段上然后继续导航

Emm*_*ali 2 android kotlin

我正在监听片段上按下的后退按钮,如下所示

val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
    podcastViewModel.removePodcast();
    // THEN - continue navigating 
}
Run Code Online (Sandbox Code Playgroud)

removePodcast();继续导航返回后,如何执行类似的任务。上面的代码拦截后退按钮按下但不继续

cac*_*acs 5

您正在覆盖通常的后按行为,这就是它不向后导航的原因。您需要调用parentFragmentManager.popBackStack()(或者findNavController().popBackStack()如果您正在使用导航组件)。

您的另一个选择是在删除播客后在回调中执行操作setEnabled = false(这意味着下次不会调用处理程序),然后立即使用 触发一个后按事件activity?.onBackPressed()。这将以默认行为处理它(除非您添加了更多调度程序!在这种情况下,它将落入下一个调度程序)


编辑:我自己使用过这些popBackStack东西,但一般来说使用“禁用调度程序并重新启动”方法可能是一个更好的主意。纯粹是因为标准行为可能会发生变化(返回堆栈和导航开发发生了很多事情),因此对调用进行硬编码popBackStack可能会导致出现问题。

我不知道官方的说法是什么 -文档是这样说的:

对于临时更改,OnBackPressedCallback强烈建议更改启用状态,因为它会维护上述顺序,如果您在多个不同的嵌套生命周期所有者上注册了回调,这一点尤其重要。

但这更多的是暂时改变对后按的响应,而不是处理一次按下并搞乱,触发多个事件以生成特定的标准行为