代码之家  ›  专栏  ›  技术社区  ›  MayNotBe

从自定义视图中的按钮取消AlertDialog

  •  5
  • MayNotBe  · 技术社区  · 7 年前

    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中获取对该对话框的引用?

    我觉得这应该非常简单,我错过了一些东西。。。

    3 回复  |  直到 7 年前
        1
  •  14
  •   Mayank Sharma    7 年前

    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();
            }
        });
    

        2
  •  0
  •   Rachit Solanki    7 年前

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

        3
  •  0
  •   Олександр Бабіч    6 年前

    这显示自定义布局中的按钮列表,每个按钮关闭对话框:

        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()
        }