java - 自定义警报对话框没有被解雇
问题描述
我创建了一个自定义对话框,在这里我使用自定义布局填充对话框视图,对话框成功显示,但是当我尝试关闭对话框时没有任何反应,我尝试将对话框声明为 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();
}
});
解决方案
问题是您在两个不同的地方调用 dialogBuilder.create 并且从未显示 alertDialog 实例。
删除行:
...b = dialogBuilder.create();
b.show();
并在同一个地方添加:
alertDialog.show();
此外,您必须修复所有内容的顺序,以使其正常工作。
- 实例化构建器
- 将参数添加到构建器
- 通过调用 dialogBuilder.create() 创建一个对话框
- 拥有对话框实例后创建点击监听器
- 显示对话框