Tôi có một AlertDialog với bố cục tùy chỉnh (chỉ là EditText) và tôi muốn xác thực dữ liệu khi nhấn nút OK. Nếu xác thực không thành công, tôi không muốn đóng hộp thoại.Android AlertDialog với DialogFragment: không đóng hộp thoại ngay cả khi OK được nhấp
Tôi đang sử dụng các nút mặc định của hộp thoại (dương và âm). Nếu tôi sử dụng "setPositiveButton (" ", hộp thoại mới DialogInterface.OnClickListener() ..." hộp thoại luôn đóng. Tôi đã xem một số bài đăng và họ nói rằng trình nghe onClick phải được ghi đè, nhưng tôi không thể làm việc đó . Đây là mã tôi thấy:
Button theButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
theButton.setOnClickListener(new CustomListener(dialog));
Kể từ khi nó nói nó nên được thực hiện sau khi hiển thị hộp thoại tôi đặt mã này trong hoạt động của tôi, không phải bên DialogFragment của tôi, nhưng nếu tôi sử dụng mDialogFragment.getDialog() nó luôn luôn trả về null
Đây là một phần của Fragment Dialog của tôi:.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.new);
LayoutInflater inflater = getActivity().getLayoutInflater();
dialogView = inflater.inflate(R.layout.edit_license, null);
builder.setView(dialogView)
// Add action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
Và trong Hoạt động của tôi, tôi làm như sau:
DialogFragment dialog = new MyDialogFragment(true, null);
dialog.show(getSupportFragmentManager(), "EditLicenseDialogFragment");
AlertDialog alertDialog = (AlertDialog)dialog.getDialog();
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
btnPositive.setOnClickListener(new CustomListener(alertDialog));
...
class CustomListener implements View.OnClickListener {
private final Dialog dialog;
public CustomListener(Dialog dialog) {
this.dialog = dialog;
}
@Override
public void onClick(View v) {
...
}
}
Như tôi đã nói, (AlertDialog) dialog.getDialog(); luôn trả về null. Tại sao vậy? Làm thế nào tôi có thể tránh đóng hộp thoại nếu xác thực không ổn?
Cảm ơn!
Thú vị. Và những gì về chức năng getButton? Nó không phải là trên DialogFragment, và nếu tôi cố gắng để có được Dialog nó trả về null. –
Hộp thoại trả về null vì mDialog được trả về bởi getDialog không được tạo (chưa). Giải pháp sẽ là thực hiện các phương pháp vòng đời khác bên trong DialogFragment xảy ra sau hàm onCreateDialog/show. Nhưng điều này không thực sự là một vấn đề cho bạn chỉ cần xác định clickListener bên trong hộp thoại (như bây giờ). Nhưng không thực hiện các hoạt động hộp thoại trên hộp thoại nhưng trên hộp thoại, với điều này bạn không cần phải gọi getDialog() – Tobrun