Android 如何在没有对话框引用的情况下从OnClick中取消对话框

Android 如何在没有对话框引用的情况下从OnClick中取消对话框,android,Android,我有一个类,它有一个方法,通过调用它可以显示一个对话框。此对话框有按钮,其中有侦听器。 问题是,当onClick被激发时,我没有办法获得对话框,这样我就可以忽略它。在这种情况下我该怎么办?我不想将对话框存储为变量,因为这是静态类,不想保存对对话框的引用 public void onClick(View v) { switch(v.getId()){ case R.id.bActionUpgradeSword: // do action

我有一个类,它有一个方法,通过调用它可以显示一个对话框。此对话框有按钮,其中有侦听器。 问题是,当onClick被激发时,我没有办法获得对话框,这样我就可以忽略它。在这种情况下我该怎么办?我不想将对话框存储为变量,因为这是静态类,不想保存对对话框的引用

public void onClick(View v) {
        switch(v.getId()){
        case R.id.bActionUpgradeSword:
            // do action

            break;
        case R.id.bActionUpgradeArmor:
                // do action        
            break;  
        }

      // I WANT TO DISMISS DIALOG HERE
    }

private void showUpgradeSwordDiag(Activity act){
         Dialog diag = new Dialog(act);
        diag.requestWindowFeature(Window.FEATURE_NO_TITLE);
        diag.setContentView(R.layout.diag_upgrade_sword_dialog);
        /* add some info to dialog */
        /* set the click listeners */
        diag.show()
}
试试这个:

public void onClick(View v) {
            switch(v.getId()){
            case R.id.bActionUpgradeSword:
                // do action
                if(diag!=null){
                diag.dismiss();   
                }
                break;
            case R.id.bActionUpgradeArmor:
                    // do action        
                break;  
            }

          // I WANT TO DISMISS DIALOG HERE
        }
     Dialog diag;
    private void showUpgradeSwordDiag(Activity act){
             diag = new Dialog(act);
            diag.requestWindowFeature(Window.FEATURE_NO_TITLE);
            diag.setContentView(R.layout.diag_upgrade_sword_dialog);
            /* add some info to dialog */
            /* set the click listeners */
            diag.show()
    }

创建一个实现DialogInterface.OnClickListener的类,并根据需要重写onClick方法。大概是这样的:

public void onClick (DialogInterface dialog, int which) {
 switch(which){
  case BUTTON_NEGATIVE:
   dialog.dismiss();
   break;
 }
}

尝试将对话框设置为视图上的标记,然后按如下所示获取标记

 Dialog diag = null;
 Button b = null;
 b.setTag(diag);
 Dialog d = (Dialog) b.getTag();

最好使用它,听起来好像您确实希望引用对话框中的某个字段,作为包含该对象的字段。现在无法获取所有对话框并将其取消:我正在使用自定义对话框非警报对话框通过构造函数将对话框传递给自定义OnClickListener类谢谢,但如果您看到我的问题,我不想创建一个变量来保存对dialog的引用,因为该类是静态的。我不希望diag参考被保留在早期,因为它实际上可能会起作用。我会试试看。。。谢谢你不能在null上调用方法。