Действие RadioButton Clear Check

У меня есть простая программа, в которой есть 3 переключателя в группе. Когда я нажимаю на любой из переключателей, у меня появляется Toast, чтобы сообщить пользователю, какую кнопку они выбрали.

Моя проблема, с которой я столкнулся, заключается в том, что у меня есть событие onClick для кнопки, которая clearCheck является радиогруппой. Когда это происходит, всплывающее сообщение появляется снова с предыдущей выбранной информацией из переключателя.

Как предотвратить появление всплывающего уведомления при clearCheck группе радио?

public class MainActivity extends AppCompatActivity {

    RadioGroup radioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize Radio Group and attach click handler
        radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
        radioGroup.clearCheck();

        // Attach CheckedChangeListener to Radio Group
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                RadioButton rb = (RadioButton) group.findViewById(checkedId);
                if(null!=rb && checkedId > -1){
                    Toast.makeText(MainActivity.this, rb.getText(), Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    public void onClear(View v){
        // Clears the radio buttons when the clear button is pressed
        radioGroup.clearCheck();
    }

person user2683183    schedule 13.01.2016    source источник
comment
показать свой onClickListener?   -  person dilix    schedule 13.01.2016
comment
OP не использует слушателя в классе, а объявляет его в xml.   -  person Rohit5k2    schedule 13.01.2016
comment
попробуйте написать в лог, какое значение checkId у вас будет после метода clearCheck.   -  person dilix    schedule 13.01.2016
comment
Очевидно, но пробовали ли вы: != -1 вместо > -1?   -  person Mark Keen    schedule 13.01.2016
comment
или обернуть : if (checkedId != -1) {..... } все внутри onCheckChanged - сделать проверку, прежде чем делать что-либо еще?   -  person Mark Keen    schedule 13.01.2016


Ответы (1)


Это связано с тем, что очистка проверки изменяет проверенный статус радиогруппы. Вам нужно установить флаг, чтобы прослушивание знало, что оно должно игнорировать это изменение.

Простое логическое значение, объявленное в классе, помеченное в onClear и проверенное в onCheckChanged (и сброс флага также в onCheckChanged).

person Knossos    schedule 13.01.2016
comment
onCheckedChanged: вызывается при изменении отмеченного переключателя. Когда выбор снят, checkedId равен -1, эта проверка if(null!=rb && checkedId > -1){ должна предотвратить отображение всплывающих уведомлений. Дополнительный флаг будет работать, но это не решение проблемы. - person dilix; 13.01.2016