Android 如何在自定义对话框之前终止它';什么东西被创造出来了?

Android 如何在自定义对话框之前终止它';什么东西被创造出来了?,android,Android,很明显,我有一个我喜欢称之为“鸡或蛋”综合征的病例。我正在试图找到一种方法来杀死一个直到进程结束才创建的警报对话框 我想做的是:当被问到“是否要重新下载此图库?”时,当我得到“是”的回答时,我想关闭底层弹出窗口(警报/生成器)。但当我得到一个“不”的答案时就不会了。换句话说,我想在那里放一个alert.discouse()命令。。。但我不能,因为它直到过程结束才被创建 这有意义吗?我正在绞尽脑汁,试图找到另一种方式将其呈现给用户 这是我的密码: public void showGalleries

很明显,我有一个我喜欢称之为“鸡或蛋”综合征的病例。我正在试图找到一种方法来杀死一个直到进程结束才创建的警报对话框

我想做的是:当被问到“是否要重新下载此图库?”时,当我得到“是”的回答时,我想关闭底层弹出窗口(警报/生成器)。但当我得到一个“不”的答案时就不会了。换句话说,我想在那里放一个alert.discouse()命令。。。但我不能,因为它直到过程结束才被创建

这有意义吗?我正在绞尽脑汁,试图找到另一种方式将其呈现给用户

这是我的密码:

public void showGalleriesDialogue(String galleriesArray) {
Log.v("Status","Ran alert dialogue routine."); 
final CharSequence[] items = TextUtils.split(galleriesArray, "\\^");

final AlertDialog.Builder builder = new AlertDialog.Builder(MainMenu.this);
builder.setTitle("Choose a Gallery to download:");

builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        final String galleryToDownload = (String) items[item].toString();

        // Check to ensure that this doesn't all ready exist            
        File checkExisists = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/pm-pvault/" + galleryToDownload);
        Log.v("Status","Checking to ensure that '"+checkExisists+"' does not exist."); 
        if(checkExisists.exists()) {
                AlertDialog.Builder existsBuilder = new AlertDialog.Builder(MainMenu.this);
                existsBuilder.setTitle("But wait!");
                existsBuilder.setMessage("This gallery already exists. Do you want to RE-INSTALL it?")
                       .setCancelable(false)
                       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                                // Preview stuff, then go get it.
                               GlobalDataStore.retrycount = 0;
                            preview(galleryToDownload);
                               }
                       })
                       .setNegativeButton("No", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                               // Never mind.
                                dialog.cancel();
                           }
                       });
                AlertDialog existsAlert = existsBuilder.create();
                existsAlert.show();
            }
        //OR ELSE
        else 
            if(galleryToDownload.contains("@")==true)  
               {
            AlertDialog.Builder doItNasty = new AlertDialog.Builder(MainMenu.this);
            doItNasty.setTitle("DISCLAIMER");
            doItNasty.setMessage(R.string.nastyDisclaimer)
                   .setCancelable(false)
                   .setPositiveButton("I AGREE", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                            // Download stuff, go get it.
                           GlobalDataStore.retrycount = 0;
                           preview(galleryToDownload);
                       }
                   })
                   .setNegativeButton("DISAGREE", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           // Never mind.
                           dialog.cancel();
                       }
                   });
            AlertDialog nastyAlert = doItNasty.create();
            nastyAlert.show();
               }
                else {
                    // Out of IF conditions to meet.  Go download it now.
                    GlobalDataStore.retrycount = 0;
                    preview(galleryToDownload);
                    }
            } // END OR ELSE
    }
});
final AlertDialog alert = builder.create();
alert.show();
}

为什么不在用户选择“是”或“否”时设置一个标志,然后在构建对话框时检查您的标志,如果用户选择“是”,则不创建它。这样,您就不必担心调用dismise,因为您将无法完成它。

onClick事件是一个回调,这意味着调用该对话框时该对话框已经存在,因此取消该对话框应该没有问题

问题是您正在重新定义变量“dialog”,因此无法访问“outer”对话框

尝试这样做:

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

我喜欢这个答案。但当我试着这样做的时候,它没有起作用。似乎我最终也遇到了同样的问题,因为对话框直到流程结束才创建,所以我无法插入任何标志来检查是/否的状态并对这些响应采取行动。我还尝试使用该类范围之外的变量(例如GlobalDataStore.flagYES)。。。但是再一次。。。同样的问题!在你指出之前。。。我并没有真正意识到我把我所有的对话命名为“对话”。一旦我将最上面的对话框重命名为“mainDialog”,我就可以在另一个对话框中执行mainDialog.cancel,我也重命名了该对话框。谢谢你的帮助!!