У меня есть AlertDialog с пользовательским макетом (только EditText), и я хочу проверить данные при нажатии кнопки OK. Если проверка не удалась, я не хочу закрывать диалог.
Я использую кнопки диалога по умолчанию (положительные и отрицательные). Если я использую "setPositiveButton ("", new DialogInterface.OnClickListener()...", диалоговое окно всегда закрывается. Я видел несколько сообщений, и они сказали, что прослушиватель onClick должен быть переопределен, но я не могу заставить его работать , Это код, который я нашел:
Button theButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
theButton.setOnClickListener(new CustomListener(dialog));
Поскольку он говорит, что это должно быть сделано ПОСЛЕ показа диалога, я поместил этот код в свою активность, а не в свой DialogFragment, но если я использую mDialogFragment.getDialog(), он всегда возвращает значение null.
Это часть моего фрагмента диалога:
@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();
}
И в своей деятельности я делаю следующее:
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) {
...
}
}
Как я уже сказал, (AlertDialog)dialog.getDialog(); всегда возвращает ноль. Это почему? Как я могу избежать закрытия диалогового окна, если проверка не в порядке?
Спасибо!