Android 材料对话赢得';第二次调用后不显示

Android 材料对话赢得';第二次调用后不显示,android,android-dialog,Android,Android Dialog,我有一些问题需要理解,为什么这座被称为“伟大图书馆”的图书馆总的来说让我失望: private MaterialDialog wifiDialog; @Override public void showWiFiDialog() { if (wifiDialog != null) { wifiDialog.dismiss(); wifiDialog = null; } wifiDialog = new MaterialDialog.Bu

我有一些问题需要理解,为什么这座被称为“伟大图书馆”的图书馆总的来说让我失望:

private MaterialDialog wifiDialog;

@Override
public void showWiFiDialog() {

    if (wifiDialog != null) {
        wifiDialog.dismiss();
        wifiDialog = null;
    }

    wifiDialog = new MaterialDialog.Builder(this)
            .title("Please activate WiFi")
            .contentColor(Color.BLACK)
            .content(R.string.wifi_dialog_content)
            .positiveText("Settings")
            .positiveColor(Color.BLACK)
            .negativeText("Exit")
            .negativeColor(Color.BLACK)
            .cancelable(false)
            .onPositive((dialog, which) -> startActivityForResult(new Intent(ACTION_WIFI_SETTINGS), REQUEST_CHECK_SETTINGS))
            .onNegative((dialog, which) -> finish())
            .build();

    wifiDialog.show();
}

@Override
public void hideWifiDialog() {
    if (wifiDialog != null) {
        wifiDialog.dismiss();
        wifiDialog = null;
    }
}
打电话时:

  • showWiFiDialog()->按预期显示
  • hideWifiDialog()->按预期隐藏
  • showWifiDialog()->有时候,运气好一点
  • hideWifiDialog()->有时,但需要更多的运气

  • 总而言之:当第一次调用show和hide时,一切都按预期进行。只要多次调用它,行为就会变得不确定。我想知道为什么?

    我想,您不需要每次都重新初始化
    MaterialDialog
    。让我们看看下面的代码是否有区别

    private MaterialDialog wifiDialog;
    
    @Override
    public void showWiFiDialog() {
    
        if (wifiDialog != null) {
            wifiDialog.dismiss();
        }else{
    
        wifiDialog = new MaterialDialog.Builder(this)
                .title("Please activate WiFi")
                .contentColor(Color.BLACK)
                .content(R.string.wifi_dialog_content)
                .positiveText("Settings")
                .positiveColor(Color.BLACK)
                .negativeText("Exit")
                .negativeColor(Color.BLACK)
                .cancelable(false)
                .onPositive((dialog, which) -> startActivityForResult(new Intent(ACTION_WIFI_SETTINGS), REQUEST_CHECK_SETTINGS))
                .onNegative((dialog, which) -> finish())
                .build();
        }
    
        wifiDialog.show();
    }
    
    @Override
    public void hideWifiDialog() {
        if (wifiDialog != null) {
            wifiDialog.dismiss();
        }
    }
    

    我以前试过这个,因为它对我来说也更符合逻辑。你是对的,我不必每次都重新初始化它,行为完全一样;也就是说,对话框是否显示完全取决于运气。