Android: RadioButtons внутри RadioButtons

У меня есть RadioGroup с 3 радиокнопками, скажем, A, B и C, когда я нажимаю на A, появляется диалоговое окно, и с помощью setSingleChoiceItems диалогового окна Android он представляет еще 4 варианта. Проблема в том, что если я нажму «Отмена» в этом диалоговом окне, A все еще будет проверяться. Как я могу убедиться, что если пользователь нажал кнопку «Отмена», A останется не отмеченным? Я пробовал следующее:

 CustomizedDialogFragment testDiag = new CustomizedDialogFragment();
           testDiag.show(getFragmentManager(), "Diag");
           if (testDiag.userChecked()){
               radioGroup.check(0);
           } else {
               radioGroup.clearCheck();
           }

    public static class CustomizedDialogFragment extends DialogFragment {
    private boolean checked = false;
    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setSingleChoiceItems(R.array.test_values, -1, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case 0: break;
                            case 1: break;
                            case 2: break;
                            case 3: break;
                        }
                    }
                })

                .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        checked = true;
                    }
                })
                .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        checked = false;
                    }
                        });
        return builder.create();
    }

    public boolean userChecked(){
        return checked;
    }

}

Однако это не работает. Был бы очень признателен за любую помощь.




Ответы (1)


EDIT: добавлен статический метод для создания экземпляра фрагмента.

private RadioGroup mGroup;

public static CustomizedDialogFragment create(RadioGroup group){
    CustomizedDialogFragment instance = new CustomizedDialogFragment(group);
    return instance;
}

protected CustomizedDialogFragment (RadioGroup group){
    mGroup = group;
}

Изменить нажатие отрицательной кнопки на:

setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        //Clear RadioGroup selection
                        mGroup.check(-1);
                    }
                        });
person Anton Kovalyov    schedule 07.06.2015
comment
Эй, спасибо! это сработало, но я уверен, что где-то читал, что не рекомендуется передавать аргумент конструктору фрагмента? Вот почему я смущен тем, как решить эту проблему. Я что-то упустил здесь? - person loneranger; 07.06.2015
comment
@loneranger Вы правы. Я отредактировал свой ответ. Но не совсем в этом уверен. - person Anton Kovalyov; 07.06.2015
comment
Спасибо за помощь! Автоматическое предложение студии Android использует пакет, который я не знаю, как управлять пакетом и передавать радиогруппу. - person loneranger; 07.06.2015
comment
у меня есть эта проблема, когда я использую mGroup.check(-1), диалоговое окно каким-то образом появляется дважды - person loneranger; 12.06.2015