2011-05-09 70 views
0

很明显,我有一个我喜欢称之为“鸡或鸡蛋”综合征的例子。我试图找到一种方法来杀死一个警告对话框,该对话框在该过程结束前不会创建。如何在创建之前杀死自定义对话框?

我在做什么:当问到“您是否要重新下载此图库?”时,我想在获得“是”答案时杀死潜在的弹出窗口(警报/构建器)。但是,当我得到“否”的答案时不行。换句话说,我想在那里放一个alert.dismiss()...但我不能,因为它不会在流程结束之前创建。

这有道理吗?我试图找到另一种方式来向用户展示这一点,我正在绞尽脑汁。

这里是我的代码:

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(); 
} 

回答

0

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

问题是你重新定义了变量“对话框”,所以你没有办法访问'外部'对话框。

尝试做它像:

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

直到你指出来......我并没有真正意识到我将我所有的对话框命名为“对话框”。一旦我将最上面的对话框重命名为“mainDialog”,我就可以在OTHER对话框中做一个mainDialog.cancel,我也重命名了它。谢谢您的帮助!! – RayHaque 2011-05-10 13:55:52

2

为什么不设置一个标志,当用户选择是或否,然后在时机成熟时建立的对话框检查你的标志,如果用户选择是,则不要不创造它。这样,你不必担心因为你没有做出而打电话解雇。

+0

我喜欢这个答案。但是,当我试图这样做时,它不起作用。看来我最终面临同样的问题,因为直到流程结束时才创建对话框,所以我无法插入任何标志来检查yes/no的状态并对这些响应采取行动。我也尝试在该类的作用域之外使用一个变量(例如GlobalDataStore.flagYES)......但是同样的问题! – RayHaque 2011-05-10 13:53:50