首页 > 解决方案 > 自定义警报对话框没有被解雇

问题描述

我创建了一个自定义对话框,在这里我使用自定义布局填充对话框视图,对话框成功显示,但是当我尝试关闭对话框时没有任何反应,我尝试将对话框声明为 final,但它没有帮助。

请看一下我的代码:

final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
                            LayoutInflater inflater = getActivity().getLayoutInflater();
                            final View dialogView = inflater.inflate(R.layout.fragment_itemdet, null);
                            dialogBuilder.setView(dialogView);

                            name=dialogView.findViewById(R.id.itemname);
                            img=dialogView.findViewById(R.id.itemdetimg);
                            counter=dialogView.findViewById(R.id.counter);
                            add=dialogView.findViewById(R.id.add);
                            del=dialogView.findViewById(R.id.sub);
                            confirm=dialogView.findViewById(R.id.confirm);
                            Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(),  "fonts/Poppins-ExtraBoldItalic.ttf");
                            name.setTypeface(custom_font);
                            final AlertDialog alertDialog = dialogBuilder.create();
                            add.setOnClickListener(v -> counter.setText(String.valueOf(i++)));
                            del.setOnClickListener(v -> counter.setText(String.valueOf(i--)));
                            name.setText(docname);
                            Glide.with(getContext()).load(url).into(img);
                            confirm.setOnClickListener(v->{
                                String qty=counter.getText().toString();
                                if (qty.equals("0")){
                                    Toast.makeText(getContext(),"Please Specify Quantity",Toast.LENGTH_LONG).show();
                                }
                                else {
                                    db=FirebaseFirestore.getInstance();
                                    db.collection("Order").document(TableListFragment.tableno)
                                            .update(
                                                    "Items", FieldValue.arrayUnion(docname),
                                                    "Quantity", FieldValue.arrayUnion(qty)
                                            ).addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                      Toast.makeText(getContext(),"Item Added",Toast.LENGTH_LONG).show();
                                            alertDialog.dismiss();
                                        }
                                    }).addOnFailureListener(new OnFailureListener() {
                                        @Override
                                        public void onFailure(@NonNull Exception e) {
                                            Log.i("WhatdFuck:",e.toString());
                                        }
                                    });

                                }
                            });
                            dialogBuilder.setTitle("Order");
                            dialogBuilder.setMessage("Enter Order Details");
                          final AlertDialog b = dialogBuilder.create();
                            b.show();
                        }
                    });

标签: javaandroidandroid-alertdialog

解决方案


问题是您在两个不同的地方调用 dialogBu​​ilder.create 并且从未显示 alertDialog 实例。

删除行:

...b = dialogBuilder.create();
b.show();

并在同一个地方添加:

alertDialog.show();

此外,您必须修复所有内容的顺序,以使其正常工作。

  • 实例化构建器
  • 将参数添加到构建器
  • 通过调用 dialogBu​​ilder.create() 创建一个对话框
  • 拥有对话框实例后创建点击监听器
  • 显示对话框

推荐阅读