onBackPressed 已弃用 - android 应用中的 webView

onBackPressed is deprecated - webView in android app

提问人:yeswhatdoyouwant 提问时间:10/17/2023 最后编辑:yeswhatdoyouwant 更新时间:10/18/2023 访问量:200

问:

我有一个应用程序,其中的主要活动(扩展 ComponentActivity)几乎只是一个 webView。我已经覆盖了 onBackPressed,如下所示。

@Override
public void onBackPressed(){
  if(this.webView.canGoBack){
    this.webView.goBack();
  }
  else{
    super.onBackPressed();
  }
}

我这样做是为了当有浏览器历史记录时,它应该通过它而不是取消应用程序本身。这在装有 android 11 的平板电脑上运行我的应用程序时有效,但在装有 android 13 的手机上运行时不起作用。现在,当onBackPressed被弃用时,我真的不明白如何替换它并保持相同的行为。

尝试改用onBackPressedDispatcher,但没有成功。不知道是做错了,还是我只是处理错了。

java android kotlin 回调 android-webview

评论

2赞 Trent Meyer 10/17/2023
这回答了你的问题吗?onBackPressed() 已弃用。有什么替代方案?

答:

0赞 jima 10/17/2023 #1

也许您可以使用 onKeyDown 事件?

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {

    if (keyCode == KeyEvent.KEYCODE_BACK) {
        return true
    }

    return super.onKeyDown(keyCode, event)
}
0赞 Owais Yosuf 10/18/2023 #2

爪哇

OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(true) {
    @Override
    public void handleOnBackPressed() {
        webView.goBack();
    }
};
OnBackPressedDispatcher onBackPressedDispatcher = 
requireActivity().getOnBackPressedDispatcher();
onBackPressedDispatcher.addCallback(getViewLifecycleOwner(), 
onBackPressedCallback);

科特林:

val onBackPressedCallback = object : OnBackPressedCallback(true) {
    override fun handleOnBackPressed() {
        webView.goBack()
    }
}
onBackPressedDispatcher.addCallback(onBackPressedCallback)

评论

0赞 yeswhatdoyouwant 10/18/2023
这个 java 代码在 android 11 上对我有用,就像我的旧代码一样。它不会改变 android 13 的任何内容。我还能做些什么吗?另外,“super.onBackPressed();”的替代品是什么?
0赞 yeswhatdoyouwant 10/18/2023
我用一个简单的“finish();”解决了最后一部分,这就足够了吗?
0赞 Owais Yosuf 10/18/2023
如果它解决了,那么请接受这个答案。
0赞 yeswhatdoyouwant 10/18/2023
它没有,我的问题是我需要一些适用于 android 13 的东西,就像我说的,现在它只是作为我的旧代码,适用于 android 11。