带有if语句的警告对话框出现错误'泄漏了最初在此处添加的DecorView窗口'

问题描述 投票:0回答:2

我试图在某些情况下显示alertdialog(在代码中为MyIfStatement)。

我在OnCreate中创建了MyDialog,并在特定情况下按下确认按钮时试图显示OnClick。

我收到一个名为“错误的窗口DecorView的错误,该错误最初是在此添加的”。

我发现我们必须在活动结束之前关闭对话框。

您能告诉我我的密码有什么问题吗?

我的代码在下面。

public class BaseWidgetConfigureActivity extends AppCompatActivity
    implements View.OnClickListener, SeekBar.OnSeekBarChangeListener{
private static final String TAG = BaseWidgetConfigureActivity.class.getSimpleName();

AlertDialog MyDialog;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ConfirmButton = findViewById(R.id.widget_confirm_button);
    CancelButton = findViewById(R.id.widget_cancel_button);

    ConfirmButton.setOnClickListener(this);
    CancelButton.setOnClickListener(this);

    MyDialog = new AlertDialog.Builder(BaseWidgetConfigureActivity.this)
            .setMessage("My message.")
            .setPositiveButton("Edit", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    finish();
                }
            })
            .create();

@Override
protected void onResume() {
    super.onResume();
}
public void onClick(View view) {
    switch (view.getId()){
        case R.id.confirm_button:
            if (MyIfStatement){
                MyDialog.show();
            }
            break;
        case R.id.cancel_button:
            finish();
            break;
        default:
            finish();
    }
}

@Override
public void onPause(){
    super.onPause();
}
}

在正面按钮onClick,我尝试过

1)

onStop();
dialog.dismiss();
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
finish();

2)

onPause();
dialog.dismiss();
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
finish();

3)

dialog.dismiss();
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
finish();

在负面按钮onClick中,我尝试过

1)

dialog.cancel();
finish();

2)

dialog.cancel();

依此类推。

android onclick android-alertdialog onclicklistener dismiss
2个回答
0
投票

使用此代码

public class BaseWidgetConfigureActivity extends AppCompatActivity
implements View.OnClickListener, SeekBar.OnSeekBarChangeListener{
private static final String TAG = 
BaseWidgetConfigureActivity.class.getSimpleName();

AlertDialog MyDialog;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

ConfirmButton = findViewById(R.id.widget_confirm_button);
CancelButton = findViewById(R.id.widget_cancel_button);

ConfirmButton.setOnClickListener(this);
CancelButton.setOnClickListener(this);

MyDialog = new AlertDialog.Builder(BaseWidgetConfigureActivity.this)
        .setMessage("My message.")
        .setPositiveButton("Edit", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss(); //1.
                startActivity(new 
Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        })
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                finish();
            }
        })
        .create();

@Override
protected void onResume() {
super.onResume();
}
public void onClick(View view) {
switch (view.getId()){
    case R.id.confirm_button:
        if (MyIfStatement){
            MyDialog.show();
        }
        break;
    case R.id.cancel_button:
        dialog.dismiss();//2.
        finish();
        break;
    default:
        dialog.dismiss();//3.
        finish();
    }
    }

@Override
public void onPause(){
dialog.dismiss(); //4.
super.onPause();
}
}

您必须先关闭对话框,然后才能完成所有操作或意图。


0
投票

尝试一下,

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Write your Message Here....");
builder.setCancelable(true);

builder.setPositiveButton(
    "Yes",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
        }
    });

builder.setNegativeButton(
    "No",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
        }
    });

AlertDialog alert = builder.create();
alert.show();
© www.soinside.com 2019 - 2024. All rights reserved.