我有一个带有函数的对话框的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构建器创建对话框之前,也会创建视图(以及按钮及其侦听器)。
我觉得这应该是超级简单的,我错过了一些东西......
答案 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()
}