单击返回按钮时,该应用在seceond之后崩溃

发布于 2025-01-19 04:55:27 字数 1086 浏览 1 评论 0原文

我自定义了后退按钮。当我点击它时,应用程序在一秒钟后崩溃。 这是代码: 错误日志

    private var mBackPressed: Long = 0
    private val timeInterval = 2000



    private fun configBackPress() {
        requireActivity().onBackPressedDispatcher.addCallback(this, true) {
            when {
                mBackPressed + timeInterval > System.currentTimeMillis() -> {
                   
                    requireActivity().onBackPressedDispatcher.onBackPressed()
                }
                else -> {
                    Snackbar.make(
                        requireActivity().findViewById(android.R.id.content),
                        getString(R.string.press_once_again_back_button_to_exit),
                        Snackbar.LENGTH_SHORT
                    )
                        .setAnchorView(viewBinding.vSnackBarHelper)
                        .show()

                    mBackPressed = System.currentTimeMillis()
                }
            }
        }
    }

当用户单击后退按钮两次时,后退应该可以工作。

I have customized back button. when I click on it, the application crashes after a second.
here is the code:
error log

    private var mBackPressed: Long = 0
    private val timeInterval = 2000



    private fun configBackPress() {
        requireActivity().onBackPressedDispatcher.addCallback(this, true) {
            when {
                mBackPressed + timeInterval > System.currentTimeMillis() -> {
                   
                    requireActivity().onBackPressedDispatcher.onBackPressed()
                }
                else -> {
                    Snackbar.make(
                        requireActivity().findViewById(android.R.id.content),
                        getString(R.string.press_once_again_back_button_to_exit),
                        Snackbar.LENGTH_SHORT
                    )
                        .setAnchorView(viewBinding.vSnackBarHelper)
                        .show()

                    mBackPressed = System.currentTimeMillis()
                }
            }
        }
    }

when the user click two times on back button, the back should work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

始终不够爱げ你 2025-01-26 04:55:27

在调用 requireActivity().onBackPressedDispatcher.onBackPressed() 之前。您应该将 isEnabled 设置为 false,因为如果我们查看 onBackPressed 源代码,我们会看到:
输入图像描述这里

它查找活动回调,如果找到任何回调,则调用它们并返回。这就是循环的原因。

你的代码应该是:

isEnabled = false
requireActivity().onBackPressedDispatcher.onBackPressed()

before calling requireActivity().onBackPressedDispatcher.onBackPressed(). you should set isEnabled to false because if we go through the onBackPressed source code we see:
enter image description here

it looks for active callbacks and if found any calls them and returns. that's what makes the loop.

your code should be:

isEnabled = false
requireActivity().onBackPressedDispatcher.onBackPressed()
对你而言 2025-01-26 04:55:27

requireActivity().onBackPressedDispatcher.onBackPressed()

d

finish()

fragment在(onbackpressed in(requiend> required requecre decrip /code>,最初将尝试将此事件传播到拥有儿童 - fragment s。因此,再次,将触发onbackpresseddispatcher,它将再次调用活动 s方法,这是您的日志屏幕截图中描述的无尽循环(btw。从不post code/log/log/log/log/log/log/log/文本为图像!)

编辑:isEnabled = false是一种更好的方法,只想留下一些案例描述

replace

requireActivity().onBackPressedDispatcher.onBackPressed()

with just

finish()

currently your onBackPressedDispatcher set in Fragment is calling onBackPressed in (required) Activity, which will at first try to propagate this event to own childrens - Fragments. so, again, onBackPressedDispatcher will be triggered, again it will call Activitys method and this is an endless loop depicted in your log screenshot (btw. never post code/log/text as image!)

edit: isEnabled = false is a better approach, just wanted to leave you some case description

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文