Android |如何在显示下一个对话之前关闭上一个对话?
Android | How to dismiss the previous dilogue before displaying next dilogue?
我有多个针对不同情况的对话框。当我为一种情况显示对话时,然后我尝试为另一种情况显示另一个对话。它与上一个重叠。
具体场景
我有两个对话。一个用于 wifi 未激活时。另一个是当 wifi 处于活动状态时。假设当我启动应用程序时 wifi 未激活。所以,它显示了一个对话。然后我打开了wifi。它显示了另一个对话。但是,它与前一个重叠。在下面的屏幕截图中,通过查看对话框的阴影可以清楚地看到它。左边一个是wifi打开的时候。然后我关闭 wifi 并再次打开。而这种重叠发生了。
屏幕截图
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;
}
}
}
};
在重新分配之前调用 cancel
alertDialog
:
...
alertDialog.cancel(); // add this line
alertDialog = builder.create();
...
在显示下一个之前,您必须关闭上一个显示的对话框。
请检查此代码,它按照您的要求工作正常
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();
}
}
我有多个针对不同情况的对话框。当我为一种情况显示对话时,然后我尝试为另一种情况显示另一个对话。它与上一个重叠。
具体场景
我有两个对话。一个用于 wifi 未激活时。另一个是当 wifi 处于活动状态时。假设当我启动应用程序时 wifi 未激活。所以,它显示了一个对话。然后我打开了wifi。它显示了另一个对话。但是,它与前一个重叠。在下面的屏幕截图中,通过查看对话框的阴影可以清楚地看到它。左边一个是wifi打开的时候。然后我关闭 wifi 并再次打开。而这种重叠发生了。
屏幕截图
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;
}
}
}
};
在重新分配之前调用 cancel
alertDialog
:
...
alertDialog.cancel(); // add this line
alertDialog = builder.create();
...
在显示下一个之前,您必须关闭上一个显示的对话框。
请检查此代码,它按照您的要求工作正常
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();
}
}