【问题标题】:Android | How to dismiss the previous dilogue before displaying next dilogue?安卓 |如何在显示下一个对话之前关闭上一个对话?
【发布时间】:2021-07-22 13:57:18
【问题描述】:

我有多个不同条件的对话盒。当我为一种情况显示对话时,然后我尝试为另一种情况显示另一种对话。它与上一个重叠。

具体场景

我有两个对话。一个用于当 wifi 不活动时。另一种是当 wifi 处于活动状态时。假设当我启动一个应用程序时,wifi 没有激活。因此,它显示了一个对话。然后我打开了wifi。它显示了另一个对话。但是,它与前一个重叠。在下面的屏幕截图中,通过查看对话框的阴影可以清楚地看到。左边是打开wifi的时候。然后我关掉了wifi再打开。这种重叠发生了。

ScreenShots

Java 代码

 private BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int wifiStateExtra = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                    WifiManager.WIFI_STATE_UNKNOWN);
            switch (wifiStateExtra) {


                case WifiManager.WIFI_STATE_ENABLED:
                    //WIFI ENABLED

                    {
                    info = wifiManager.getConnectionInfo();
                    if (!info.getSSID().trim().equals(ssid)) {
                        title = "Connect to Devil";
                        msg = "In order to work with system you need to be connected with Devil";

                        builder.setTitle(title);
                        builder.setMessage(msg);
                        builder.setPositiveButton("OK", (dialog, which) -> startActivity(WiFiIntent));
                        builder.setNegativeButton("Close App", ((dialog, which) -> finishAffinity()));
                        alertDialog = builder.create();
                        alertDialog.show();
                        alertDialog.setCancelable(false);

                    }

                    break;
                }


                case WifiManager.WIFI_STATE_DISABLED:
                    //WIFI DISABLED
                {
                    title = "Enable WiFi";
                    msg = "Please enable wifi and connect to Devil";
                    builder.setTitle(title);
                    builder.setMessage(msg);
                    builder.setPositiveButton("OK", (dialog, which) -> startActivity(WiFiIntent));
                    builder.setNegativeButton("Close App", ((dialog, which) -> finishAffinity()));
                    alertDialog = builder.create();
                    alertDialog.show();
                    alertDialog.setCancelable(false);
                    break;
                }
            }
        }
    };

【问题讨论】:

    标签: android dialog android-alertdialog android-dialog


    【解决方案1】:

    在显示下一个对话框之前,您必须关闭上一个显示的对话框。

    请检查此代码,它可以根据您的要求正常工作

    public class MainActivity extends AppCompatActivity {
    
        private MaterialAlertDialogBuilder materialDialog;
        private AlertDialog dialog;
        private String title;
        private String msg;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            materialDialog = new MaterialAlertDialogBuilder(this);
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            IntentFilter intentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
    
            registerReceiver(wifiStateReceiver, intentFilter);
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            unregisterReceiver(wifiStateReceiver);
        }
    
        private final BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int wifiStateExtra = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    
                switch (wifiStateExtra) {
    
                    case WifiManager.WIFI_STATE_ENABLED:
                        title = "Connected";
                        msg = "Wifi Enabled.";
                        materialDialog.setPositiveButton("ok", (dialogInterface, i) -> {
                            dialogInterface.dismiss();
                        }).setNegativeButton("close", (dialogInterface, i) -> {                    
                        dialogInterface.dismiss();
                            showToast(msg);
                        });
    
                        break;
                    case WifiManager.WIFI_STATE_DISABLED:
                        title = "disconnected";
                        msg = "Wifi Disabled.";
                        materialDialog.setPositiveButton("ok", (dialogInterface, i) -> {
                            dialogInterface.dismiss();
                        }).setNegativeButton("close", (dialogInterface, i) -> {                       
                          dialogInterface.dismiss();
                            showToast(msg);
                        });
                        break;
                }
    
                if (dialog != null && dialog.isShowing()) {
                    dialog.dismiss();
                }
    
                dialog = materialDialog.setTitle(title).setMessage(msg).create();
                dialog.show();
            }
        };
    
        private void showToast(String msg) {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
    }
    

    【讨论】:

    • 此代码为对话框提供闪烁效果
    • @Anirudhsinh Jadeja 这与闪烁无关,因为当显示对话框时,它会在屏幕上覆盖,因此我们可以使用小吃店代替对话框来消除闪烁行为
    【解决方案2】:

    在重新分配alertDialog之前,只需致电cancel

    ...
    alertDialog.cancel(); // add this line
    alertDialog = builder.create();
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多