2

このコードを実装しようとしています

    if(someCondition){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("message")
        .setPositiveButton("Yes", this)
        .setNegativeButton("No", this);
        builder.show();
    }
    finish();

問題は、ダイアログが表示される前にアクティビティが finish() を呼び出すため、次の例外がスローされることです

MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40704090 that was originally added here

それをどのように処理しますか?

4

4 に答える 4

3

OnDismissListenerを使用しfinish()て、ダイアログが閉じたときに呼び出します。このようにして、ユーザーはダイアログに応答でき、アクティビティを閉じることができます。


if(someCondition) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("message");
        .setPositiveButton("Yes", this)
        .setNegativeButton("No", this);

    AlertDialog dialog = builder.create();
    dialog.setOnDismissListener(new OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            finish();
        }
    });
    dialog.show();
}
else {
    finish();
}
于 2012-10-21T17:47:40.460 に答える
3
if(someCondition){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("message")
    .setPositiveButton("Yes", this)
    .setNegativeButton("No", this);
    builder.show();
} else {
    finish(); 
}

そして、ボタンクリックのハンドラーで、もう一度仕上げを入れます。

于 2012-10-21T17:43:53.890 に答える
0

次のエラーが発生します。

MyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40704090 that was originally added here

アクティビティが終了する前にビルダーを却下する必要があるためです。ですから、あなたはあなたの活動をどのように終わらせたいかを再設計しなければならないと思います。おそらく、「いいえ」ボタンがクリックされたときに終了したいですか?

これがお役に立てば幸いです。

于 2012-10-21T17:47:16.327 に答える
0

質問が実際に何であるかはわかりませんが、ダイアログが表示されている間にアクティビティを終了したため、エラーが発生しています。私がよく行うことは、アクティビティdialog.dismiss()onPauseoronStopメソッドを呼び出すことです。

このコードはどうですか?:

あなたの活動のどこか;

private AlertDialog dialog;

onPause または onStop メソッド、

@Override
public void onPause() {
    super.onPause();
    if(dialog != null){
        dialog.dismiss();
    }
}

ダイアログの構築、

    if(someCondition){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("message")
        .setPositiveButton("Yes", new OnClickListener(){
            public void onClick(DialogInterface arg0, int arg1) {
                //do stuff
                 //finish?
            }
        });
        .setNegativeButton("No", new OnClickListener(){
            public void onClick(DialogInterface arg0, int arg1) {
                //do stuff
                //finish?
            }
        });
        dialog = builder.show();
    }
于 2012-10-21T17:57:01.907 に答える