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
相关产品推荐
相关产品推荐

