You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android onBackPressed多条件判断问题:WebView首页FAB隐藏时退出弹窗不显示

问题原因分析
  • 核心错误1:判断WebView是否在首页的条件写错了
    WebView的copyBackForwardList().getCurrentIndex()返回值在首页时是0,你的代码里写的判断条件是<0,这个场景永远不会命中,自然弹不出退出确认框。
  • 核心错误2:多逻辑分支没有加中断逻辑
    你当前的第一个判断(隐藏FAB)执行之后没有加return,会继续往下执行后续的WebView相关判断,不符合你要求的「按优先级执行」逻辑,极端情况下会出现隐藏FAB的同时触发WebView返回/退出弹窗的问题。
  • 优化点:每次onBackPressed都执行findViewById获取WebView实例没必要,建议将WebView定义为Activity的成员变量,在onCreate里初始化一次即可。
修复后的代码示例
@Override
public void onBackPressed() {
    WebView myWebView = (WebView) findViewById(R.id.webview);
    // 优先级1:FAB可见则先隐藏,执行完直接返回
    if (areAllFabsVisible) {
        hideFabs();
        return;
    }
    // 优先级2:不在首页则返回WebView上一页,执行完直接返回
    if (myWebView.copyBackForwardList().getCurrentIndex() > 0) {
        myWebView.goBack();
        return;
    }
    // 优先级3:剩余场景默认是FAB隐藏+处于首页,直接弹退出确认
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(false);
    builder.setMessage("Do you want to Exit?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}

内容的提问来源于stack exchange,提问作者user15312910

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:33:01