在 onBackPressed() Android 中使用多个条件

Posted

技术标签:

【中文标题】在 onBackPressed() Android 中使用多个条件【英文标题】:Using multiple conditions in onBackPressed() Android 【发布时间】:2021-10-28 18:55:53 【问题描述】:

我正在使用一个非常简单的应用程序,它带有一个 WebView 和一个扩展的浮动操作按钮。

在用户按下后退按钮时,我希望在不同的时间发生 3 件不同的事情:

如果扩展 FAB 可见,请将其隐藏 如果 Extended FAB 不可见并且 (&&) WebView 不在 BackForwardList 的第一个索引上(意味着如果用户不在应用程序的主页上),则返回(意味着转到上一页直到用户到达应用的首页) 如果 WebView 的索引小于 BackForwardList 的第一个索引(意味着如果用户在主页上)并且 (&&) FAB 不可见,则显示退出应用程序的消息

问题

前两个功能工作正常,第三个功能不工作,即如果我在主页上单击后退按钮并且(&&)FAB 也关闭,它不会显示消息“您要退出吗?”

我做错了什么?

这是我的 MainActivity

    @Override
    public void onBackPressed() 

        WebView myWebView = (WebView) findViewById(R.id.webview);

        if (areAllFabsVisible ) 

            hideFabs();

        

        if ( myWebView.copyBackForwardList().getCurrentIndex() > 0 && !areAllFabsVisible) 
            myWebView.goBack();
        



        else if (myWebView.copyBackForwardList().getCurrentIndex() < 0 && !areAllFabsVisible) 

            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) 
                    //if user pressed "yes", then he is allowed to exit from application
                    finish();
                
            );
            builder.setNegativeButton("No", new DialogInterface.OnClickListener() 
                @Override
                public void onClick(DialogInterface dialog, int which) 
                    //if user select "No", just cancel this dialog and continue with app
                    dialog.cancel();
                
            );
            AlertDialog alert = builder.create();
            alert.show();
        


        
    

【问题讨论】:

【参考方案1】:

我认为问题出在这里:


 else if (myWebView.copyBackForwardList().getCurrentIndex() < 0 && !areAllFabsVisible) 


BackForwardList() 的索引不能为负数,所以你应该这样写:

 else if (myWebView.copyBackForwardList().getCurrentIndex() == 0 && !areAllFabsVisible) 

检查您是否在第一页。这意味着您位于第 0 个索引处,即您的主页。

【讨论】:

以上是关于在 onBackPressed() Android 中使用多个条件的主要内容,如果未能解决你的问题,请参考以下文章

在单个活动 android 应用程序中管理 onBackPressed

android 12 onBackPressed

在 onBackPressed() Android 中使用多个条件

在 Android 片段中使用 onBackPressed()

android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法

onBackPressed 上的 Android 片段 NullPointerException