Установить начальное состояние для RadioGroup, не вводя OnCheckedChangeListener

Я использую RadioGroup, и когда пользователь нажимает на одну из кнопок, выполняется звонок в базу данных (обновление данных). Я установил OnCheckedChangeListener для RadioGroup:

viberPermissionView.getAppPermissions().setOnCheckedChangeListener(new 
RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, 
    int checkedRadioButtonId) 
    {
     callService(App.VIBER, checkedRadioButtonId);
    }
});

У меня есть проблема, когда я открываю приложение и устанавливаю состояние кнопок (какая из них выбрана), это то же самое, что нажатие на кнопку, и я звоню в базу данных и без необходимости обновляю данные. Я хочу избежать этого вызова базы данных, чтобы установить состояние, не входя в метод OnCheckedChangeListener. Вот часть того, как я в настоящее время устанавливаю начальное состояние:

private void createResourcePicker() {
    resourcePicker.setSlideOnFling(false);
    resourcePicker.setAdapter(new PermissionsAdapter(permissions));
    resourcePicker.addScrollStateChangeListener(this);
    resourcePicker.addOnItemChangedListener(this);
    resourcePicker.scrollToPosition(1);
    resourcePicker.setItemTransitionTimeMillis(10);
    resourcePicker.setItemTransformer(new ScaleTransformer.Builder()
            .setMinScale(0.8f)
            .build());
}

1 ответ

Решение

Я наконец нашел способ решить эту проблему. В методе OnCheckedChanged я беру RadioButton и устанавливаю OnClickListener. В OnClickListener я устанавливаю функцию, которая должна выполняться, когда пользователь нажимает кнопку, и она не выполняется, когда состояние RadioGroup устанавливается динамически. Вот логика:

viberPermissionView.getAppPermissions().setOnCheckedChangeListener(
            new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, 
                int checkedRadioButtonId) {
                    final RadioButton checkedButton =     
                viberPermissionView.findViewById(checkedRadioButtonId);
                    checkedButton.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            startService(checkedButton, 
                              App.VIBER);
                        }
                    });
                }
            });
Другие вопросы по тегам