WebViewClient无onBackPressed方法?如何实现WebView返回键响应逻辑
问题解答
关于onBackPressed是否废弃的说明
onBackPressed 不属于 WebViewClient 的API,它是Android Activity 类提供的系统返回键响应方法,所以你在WebViewClient的官方文档里找不到相关内容,该方法也没有被废弃,只是你查询的文档对象有误。
实现返回键优先回退WebView页面的逻辑
你写的代码逻辑本身就是正确可用的,根据使用场景不同,实现方式如下:
1. 在Activity中使用WebView
直接重写Activity的onBackPressed方法即可,代码如下:
@Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } }
逻辑说明:
- 调用
webView.canGoBack()判断当前WebView是否有可回退的历史浏览记录 - 存在可回退记录时调用
webView.goBack()回到上一个浏览页面 - 没有可回退记录时调用父类方法,执行系统默认返回逻辑,关闭当前Activity
2. 在Fragment中使用WebView
如果是在Fragment中加载WebView,推荐使用OnBackPressedCallback适配返回逻辑,避免和宿主Activity的返回事件冲突:
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 注册返回键回调 requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { // 没有可回退记录时移除当前回调,走默认返回逻辑 setEnabled(false); requireActivity().onBackPressed(); } } }); }
内容的提问来源于stack exchange,提问作者blue piranha
相关产品推荐
相关产品推荐

