Android: отключить DialogFragment кнопки ОК / Отмена
Как я могу отключить кнопку OK/ Отмена для DialogFragment, когда он создается с помощью AlertDialog? Я пытался вызвать myAlertDialogFragment.getDialog(), но он всегда возвращает ноль, даже если фрагмент отображается
public static class MyAlertDialogFragment extends DialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}
}
Я знаю, что могу сделать это, надувая макет, который содержит как кнопку отмены, так и кнопку ОК, но я лучше использую решение AlertDialog, если это возможно
2 ответа
Присоедините ваш AlertDialog к переменной:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
(initialization of your dialog)
AlertDialog alert = builder.create();
alert.show();
А затем получить кнопку из вашего AlertDialog и установить его отключить / включить:
Button buttonNo = alert.getButton(AlertDialog.BUTTON_NEGATIVE);
buttonNo.setEnabled(false);
Это дает вам возможность изменять свойства кнопки во время выполнения.
Затем верните переменную оповещения.
AlertDialog должен быть показан до получения его представления.
Вам нужно переопределить onStart() в DialogFragment и сохранить ссылку на кнопку. Затем вы можете использовать ссылку для повторного включения кнопки позже:
Button positiveButton;
@Override
public void onStart() {
super.onStart();
AlertDialog d = (AlertDialog) getDialog();
if (d != null) {
positiveButton = d.getButton(Dialog.BUTTON_POSITIVE);
positiveButton.setEnabled(false);
}
}