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);
    }

}
Другие вопросы по тегам