从自定义视图中的按钮中关闭AlertDialog

时间:2017-09-15 17:26:18

标签: android android-alertdialog

我有一个带有函数的对话框的util类:

public static void buildCustomDialog(Context contextRef, View dialogContentView)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(contextRef);

    builder.setView(dialogContentView);

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null);

    AlertDialog dialog = builder.create();

    dialog.show();

}

我传递的视图有两个带clickListeners的按钮。一切都很好,除了当用户点击其中一个自定义按钮时我无法关闭对话框。所以他们导航到另一个页面,回击并且对话框仍在那里。

如何在对话框之前创建自定义clickListeners中的对话框参考?

我尝试了所有可能的选择。我最近的尝试是使用自定义接口创建自定义DialogFragment,但即使这样,在AlertDialog构建器创建对话框之前,也会创建视图(以及按钮及其侦听器)。

我觉得这应该是超级简单的,我错过了一些东西......

3 个答案:

答案 0 :(得分:8)

您需要在自定义按钮上设置onClick侦听器。

试试这个:

   AlertDialog.Builder builder = new AlertDialog.Builder(contextRef);

    builder.setView(dialogContentView);

    Button btnOk= (Button) dialogContentView.findViewById(R.id.btn_ok);

    builder.setNegativeButton(contextRef.getString(R.string.std_cancel), null);

    AlertDialog dialog = builder.create();

    dialog.show();

    btnOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });

那就是它!!

答案 1 :(得分:0)

易。返回对话框引用,在调用此方法的位置收集它。如果对话框引用包含有效对象,请检查您的dismiss按钮侦听器。如果是,则关闭此对话框。

答案 2 :(得分:0)

在Kotlin中这样的事情(使用Anko对话框) 这显示了自定义布局中的按钮列表,每个按钮都关闭对话框:

    private var closeDialogAction: () -> Unit = {}

    private fun showDialog(greetings: List<Greeting>) {
        val alert = context.alert {
            customView {
                verticalLayout {
                    greetings.forEach {
                        textView {                                 
                            text = it.name
                            setOnClickListener {
                                // Make some other necessary actions
                                closeDialogAction()
                            }
                        }
                    }
                }
            }
        }.build()

        closeDialogAction = {alert.dismiss()}

        alert.show()
    }