我正在监听片段上按下的后退按钮,如下所示
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
podcastViewModel.removePodcast();
// THEN - continue navigating
}
Run Code Online (Sandbox Code Playgroud)
removePodcast();继续导航返回后,如何执行类似的任务。上面的代码拦截后退按钮按下但不继续
您正在覆盖通常的后按行为,这就是它不向后导航的原因。您需要调用parentFragmentManager.popBackStack()(或者findNavController().popBackStack()如果您正在使用导航组件)。
您的另一个选择是在删除播客后在回调中执行操作setEnabled = false(这意味着下次不会调用处理程序),然后立即使用 触发一个后按事件activity?.onBackPressed()。这将以默认行为处理它(除非您添加了更多调度程序!在这种情况下,它将落入下一个调度程序)
编辑:我自己使用过这些popBackStack东西,但一般来说使用“禁用调度程序并重新启动”方法可能是一个更好的主意。纯粹是因为标准行为可能会发生变化(返回堆栈和导航开发发生了很多事情),因此对调用进行硬编码popBackStack可能会导致出现问题。
我不知道官方的说法是什么 -文档是这样说的:
对于临时更改,
OnBackPressedCallback强烈建议更改启用状态,因为它会维护上述顺序,如果您在多个不同的嵌套生命周期所有者上注册了回调,这一点尤其重要。
但这更多的是暂时改变对后按的响应,而不是处理一次按下并搞乱,触发多个事件以生成特定的标准行为
| 归档时间: |
|
| 查看次数: |
6520 次 |
| 最近记录: |