如何在android中关闭AlertDialog

Posted

技术标签:

【中文标题】如何在android中关闭AlertDialog【英文标题】:How to dismiss AlertDialog in android 【发布时间】:2013-01-28 23:39:25 【问题描述】:

我创建了包含 4 个按钮的 AlertDialog

OptionDialog = new AlertDialog.Builder(this);
        OptionDialog.setTitle("Options");
        LayoutInflater li = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = li.inflate(R.layout.options, null, false);
        background = (Button) v.findViewById(R.id.bkgSpinnerLabel);
        SoundVib = (Button) v.findViewById(R.id.SoundVibSpinnerLabel);

        OptionDialog.setView(v);
        OptionDialog.setCancelable(true);
        OptionDialog.setNeutralButton("Ok",
                new DialogInterface.OnClickListener() 

                    public void onClick(DialogInterface arg0, int arg1) 
                    
                );
        background.setOnClickListener(new OnClickListener() 
            public void onClick(View v) 
                SetBackground();
             // here I want to dismiss it after SetBackground() method 
            
        );


        SoundVib.setOnClickListener(new OnClickListener() 
            public void onClick(View v) 
                Intent soundVibIntent = new Intent(SebhaActivity.this, EditPreferences.class);
                startActivity(soundVibIntent);
            
        );

        OptionDialog.show();

我想在 SetBackground() 方法之后关闭它,我该怎么做? 提前致谢。

【问题讨论】:

请使用java命名约定:方法和变量名应该以小写字母开头。 使用 dialog.dismiss();在 SetBackground(); 之后 @DaanGeurts - AlertDialog.Builder 类中没有任何 dismiss() 方法。 @user370305 对,我错过了那个,你的答案应该有效 OptionDialog.setView(null); 【参考方案1】:

实际上 AlertDialog.Builder 类中没有任何 cancel()dismiss() 方法。

所以不要使用AlertDialog.Builder optionDialog,而是使用AlertDialog 实例。

喜欢,

AlertDialog optionDialog = new AlertDialog.Builder(this).create();

现在,请致电optionDialog.dismiss();

background.setOnClickListener(new OnClickListener() 
    public void onClick(View v) 
        SetBackground();
        // here I want to dismiss it after SetBackground() method 
        optionDialog.dismiss();
    
);

【讨论】:

真的很好,重要的部分是:“NOT CREATE A (AlertDialog.Builder OptionDialog = AlertDialog.Builder(getActivity()); ) 如果不创建 (AlertDialog OptionDialog =new AlertDialog.Builder(this) .create(); ) 之后你可以调用 .dismiss(); 太好了,谢谢!!!!! 这里需要注意的是,OptionDialog 需要对上面 sn-p 中的 onclick 侦听器可见。一种方法是将AlertDialog 声明为父活动类中的成员变量。 我应该在关闭它之后使用optionDialog = null 以避免内存泄漏吗?【参考方案2】:

我认为有一个更简单的解决方案:只需使用传递给 onClick 方法的 DialogInterface 参数即可。

AlertDialog.Builder db = new AlertDialog.Builder(context);
        db.setNegativeButton("cancel", new DialogInterface.OnClickListener()
            @Override
            public void onClick(DialogInterface d, int arg1) 
                db.cancel();
                //here db.cancel will dismiss the builder

            ;  
        );

例如,请参阅http://www.mkyong.com/android/android-alert-dialog-example。

【讨论】:

d.dismiss(); 为我工作,是的,这个更简单,更原生于 AlertDialog【参考方案3】:

试试这个:

   AlertDialog.Builder builder = new AlertDialog.Builder(this);
   AlertDialog OptionDialog = builder.create();
  background.setOnClickListener(new OnClickListener() 
        public void onClick(View v) 
            SetBackground();
       OptionDialog .dismiss();
        
    );

【讨论】:

我之前试过这个,但直到我使用了接受的答案中的代码后才对我有用。 好的,我错过了这条线 AlertDialog.Builder builder = new AlertDialog.Builder(this);现在编辑答案... @Android_coder 在片段中时该怎么办? this 将为空。【参考方案4】:

关闭或取消 AlertDialog.Builder

dialog.setNegativeButton("إلغاء", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) 
                        dialogInterface.dismiss();
                    
                );

你在对话界面调用dismiss()

【讨论】:

【参考方案5】:

这是我关闭警报对话框的方法

lv_three.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() 
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 
                GetTalebeDataUser clickedObj = (GetTalebeDataUser) parent.getItemAtPosition(position);
                alertDialog.setTitle(clickedObj.getAd());
                alertDialog.setMessage("Öğrenci Bilgileri Güncelle?");
                alertDialog.setIcon(R.drawable.ic_info);
                // Setting Positive "Yes" Button
                alertDialog.setPositiveButton("Tamam", new DialogInterface.OnClickListener() 
                    public void onClick(DialogInterface dialog, int which) 
                        // User pressed YES button. Write Logic Here
                    
                );
                alertDialog.setNegativeButton("İptal", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) 
                        //alertDialog.
                        alertDialog.setCancelable(true); // HERE

                    
                );
                alertDialog.show();
                return true;
            
        );

【讨论】:

【参考方案6】:

有两种方法可以关闭警报对话框。

选项 1:

AlertDialog#create().dismiss();

选项 2:

The DialogInterface#dismiss();

当您为按钮定义事件侦听器时,框架会立即调用DialogInterface#dismiss();

    AlertDialog#setNegativeButton(); AlertDialog#setPositiveButton(); AlertDialog#setNeutralButton();

用于警报对话框。

【讨论】:

【参考方案7】:

只需将视图设置为 null 即可简单地关闭 AlertDialog。

【讨论】:

以上是关于如何在android中关闭AlertDialog的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android SearchView 中关闭键盘?

你如何在android studio中关闭版本控制?

如何在android中关闭材料设计EditText的默认功能?

当有多个具有不同通知ID的通知时,如何在android中关闭通知?

如何在 Kotlin 中关闭 Android 应用程序

如何以编程方式在android中关闭GPS? [复制]