取消使用AlertDialog.Builder创建的对话框

时间:2012-05-16 09:53:06

标签: android android-alertdialog

我有一个AlertDialog.Builder里面有一个按钮,我想在点击它时忽略该对话框。

但是没有.dismiss().cancel()方法。

    LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = inf.inflate(R.layout.map_window, null);

    window = new AlertDialog.Builder(activity);
    window.setCancelable(true);

    buttonStar = (ImageButton)layout.findViewById(R.id.buttonStar);
    buttonStar.setBackgroundResource(R.drawable.star);
    buttonStar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
        //finishing window;
    }
      });


    window.setPositiveButton("Volver", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int wichButton) {  

        }  
    });  

    window.show();

}

3 个答案:

答案 0 :(得分:4)

AlertDialog.Builder#show会返回AlertDialog本身,所以只需获取从show返回的AlertDialog本身,然后调用dismiss:

AlertDialog dialog;
//...

dialog = window.show();

答案 1 :(得分:2)

尝试从对话框对象中取消它。创建一个对话框对象,如下所示:

Dialog dialog = window.create();
dialog.cancel()

答案 2 :(得分:0)

找到AlertDialog的波纹管代码。使用新的DialogInterface.OnClickListener()而不是onClick()。

    AlertDialog ad = new AlertDialog.Builder(MainCatalogueActivity.this)

                    .setTitle("Server Response Error")

                    .setMessage("some message ")

                    .setIcon(R.drawable.ic_menu_close_clear_cancel)

                    .setNegativeButton("Close", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            Intent intent = new Intent(Intent.ACTION_MAIN);

                            intent.addCategory(Intent.CATEGORY_HOME);

                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                            startActivity(intent);

                            finish();


                        }
                    }).create();
    ad.show();