Проблема с состоянием совместимости коммутатора Android

Пример пользовательского интерфейса

Я хочу изменить состояние дочерних переключателей от родительского переключателя.

вкратце:

Случай 1: Родитель включен -> все Дочерние элементы включены

случай 2: Родитель выключен -> все дочерние элементы выключены

случай 3: дочерний элемент 2 выключен (дочерний элемент 1 и 3 включен) -> родительский элемент включен

Проблема Когда я включаю/выключаю все дочерние переключатели, родительский переключатель должен соответственно включаться/выключаться.

ниже мой код в случае кода 1,2 и 3 работает нормально.

switchParent.setOnCheckedChangeListener (новый CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

            if (b) {

                switchChild1.setChecked(true);
                switchChild2.setChecked(true);
                switchChild3.setChecked(true);

            } else {

                switchChild1.setChecked(false);
                switchChild2.setChecked(false);
                switchChild3.setChecked(false);

            }
        }
    }); switchChild1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            setState();
        }
    });

    switchChild2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            setState();
        }
    });


    switchChild3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            setState();
        }
    });

setState()

частная пустота setState () {

   if (switchChild1.isChecked() || switchChild2.isChecked() || switchChild3.isChecked()) {

        switchParent.setChecked(true);

    } else {

        switchParent.setChecked(false);

    }

}

Я буду признателен за любую помощь.


person Aks4125    schedule 22.01.2016    source источник


Ответы (1)


Измените метод setState().

private void setState() {
if (switchChild1.isChecked() && switchChild2.isChecked() && switchChild3.isChecked()) {
    switchParent.setChecked(true);
} else {
    switchParent.setChecked(false);
}

}

person Jigar Shekh    schedule 22.01.2016
comment
Я пробовал ваш код, но когда все переключатели включены, и я пытаюсь отключить любой дочерний переключатель, тогда состояние всех переключателей автоматически меняется на ВЫКЛЮЧЕНО. - person Aks4125; 22.01.2016