当前位置: 代码迷 >> Android >> 如何不点击“确定”,“取消”关闭AlertDialog.Builder窗口
  详细解决方案

如何不点击“确定”,“取消”关闭AlertDialog.Builder窗口

热度:66   发布时间:2016-05-01 22:08:40.0
怎么不点击“确定”,“取消”关闭AlertDialog.Builder窗口
听说是用removeDialog(id),但是我创建的时候不可以指定窗口的id啊, 而且该类也没有finish,dismiss,cancel等方法,麻烦了我的代码如下:
final View selectplate = inflater.inflate(R.layout.selectplateforchangecolor, null);
builder = new AlertDialog.Builder(STKActivity.this).setView(selectplate);
plateList = (ListView)selectplate.findViewById(R.id.plateList1);
builder.setTitle("选择板块");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
public void onClick(DialogInterface dialog, int whichButton) {  
//这里添加点击确定后的逻辑  
logo = 1;
cPage = 1;
total = plateStockRelationService.CountStocksByPlateName(selectedPlateName);
pageBean = new PageBean(cPage,total,pSize);
freshStockList(pageBean);
}  
}).setNegativeButton("取消",null).create().show();
}

------解决方案--------------------
给你一段简单的代码看看吧。

public class STKActivity extends Activity
{
……
@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
return new AlertDialog.Builder(STKActivity.this).(这儿自己添加).create();
}
……
}
其实就是覆盖 Activity 的方法 onCreateDialog(int id),返回create()创建的Dialog 。
在某个地方调用 onCreateDialog(),传入的id就是这个 AlertDialog.Builder对话框的id,所以要保存这个id值。然后在某个地方调用 removeDialog(id) 就关闭了这个对话框。

------解决方案--------------------
看了半天硬是没明白楼主是要关闭dialog呢,还是不要关闭dialog。你自己看吧:
1.关闭dialog
DialogInterface.OnClickListener接口的onClick方法第一个参数即为该接口的应用,调用dialog.dismiss()或cancel方法就可以关闭对话框。另外其实dialog的三个类型按钮只要点击就会关闭dialog。所以你想根据逻辑立即关闭dialog的话,只要在onClick方法内直接return就好。
2.不关闭dialog
因为dialog的三个类型按钮无论如何最终都会发送一个关闭消息儿导致对话框关闭。所以你如果要求手动控制(通过dismiss或cancel方法)来关闭对话框的话,你就需要用反射机制替换AlertDialog的消息处理函数。代码如下:
Java code
/** [email protected]        ProcessDialog [email protected]        处理dialog类 [email protected]        Finger     [email protected]            2011-7-28 [email protected]        V1.0 */public class ProcessDialog {    public void processDialog(AlertDialog dialog){        if(dialog == null)            return;         try              {                               Field field  =  dialog.getClass().getDeclaredField("mAlert");                field.setAccessible(true);                //获得mAlert变量的值                 Object obj  =  field.get(dialog);                field  =  obj.getClass().getDeclaredField("mHandler");                field.setAccessible(true);                //修改mHandler变量的值,使用新的ButtonHandler类                 field.set(obj, new ButtonHandler(dialog));            }             catch  (Exception e)            {            }    }        /***     *      [email protected]        ButtonHandler     [email protected]        dialog的Button消息处理类     [email protected]        Finger         [email protected]            2011-7-28     [email protected]        V1.0     */    class  ButtonHandler  extends  Handler    {         private  WeakReference < DialogInterface >  mDialog;         public  ButtonHandler(DialogInterface dialog)        {            mDialog  =   new  WeakReference < DialogInterface > (dialog);        }        @Override         public   void  handleMessage(Message msg)        {             switch  (msg.what)            {                 case  DialogInterface.BUTTON_POSITIVE:                 case  DialogInterface.BUTTON_NEGATIVE:                 case  DialogInterface.BUTTON_NEUTRAL:                    ((DialogInterface.OnClickListener) msg.obj).onClick(mDialog                            .get(), msg.what);                     break ;            }        }    }}
  相关解决方案