首页 > 解决方案 > 无法关闭自定义 AlertDialog

问题描述

所以我有一个带有三个不同按钮(父按钮)的应用程序,按下其中任何一个按钮时,都会显示带有 9 个不同按钮的自定义警报对话框,但是警报对话框中这 9 个按钮的功能会有所不同,具体取决于三个父按钮中的哪一个叫它。在按下 9 个按钮中的任何一个时,我希望应用程序执行特定功能,然后关闭警报对话框。现在的问题是,我可以通过调用我创建的方法轻松调用警报对话框,showcustomdialog();但我无法alertdialog.dismiss();在父按钮的 OnClickListener 内使用它来关闭它,因为该方法具有 void 结果类型。我试过使用 if-else 语句,但它不起作用。我怎样才能达到要求?

方法:

    private void showCustomDialog() {
    ViewGroup viewGroup = findViewById(android.R.id.content);
    View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_main2, viewGroup, false);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(dialogView);
    final AlertDialog alertDialog = builder.create();
    alertDialog.show();
      }

我打电话给肉食并按如下方式使用它:

    parentbutton1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        showCustomDialog();
        alertbutton1.getId();
        alertbutton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView1.setText("500");
                function();
             //I want to dismiss the alertdialog here.
            }
        });
        alertbutton2.getId();
        alertbutton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView1.setText("1000");
                function();
             //I want to dismiss the alertdialog here.
            }
        });

等等。

标签: android-studio

解决方案


我为您找到了使用 AlertDialog 的解决方案。

  parentbutton1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                createDialog();
            }

        });

那么该方法必须是私有或公共的 AlertDialog:

   private AlertDialog createDialog() {

    LayoutInflater inflater = (getActivity()).getLayoutInflater(); // for fragment or getLayoutInflater(); for activity
    View v = inflater.inflate(R.layout.dialog_add_new_list, null);
    Button okButton = v.findViewById(R.id.confirm_button);
    Button cancelButton = v.findViewById(R.id.cancel_button);
    
    final AlertDialog dialog = new AlertDialog.Builder(getActivity()) // for fragment or AlertDialog.Builder ( this ) for activity
        .setView(v)

        .show();
        
    okButton.setOnClickListener(new View.OnClickListener() {

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

            @Override
            public void onClick(View p1) {
                dialog.dismiss();
            }


        });
    
    return dialog;
    
}

PS 用你的替换我用来创建这个示例的 id。


推荐阅读