Обе кнопки отмечены в MaterialToggleButton Android, в то время как только одна должна - PullRequest
0 голосов
/ 27 марта 2020

У меня есть MaterialButtonToggleGroup как это

<com.google.android.material.button.MaterialButtonToggleGroup
            android:id="@+id/toggleGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            app:singleSelection="true">

            <com.google.android.material.button.MaterialButton
                android:id="@+id/bYes"
                style="@style/Widget.MaterialComponents.Button.OutlinedButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="YES" />

            <com.google.android.material.button.MaterialButton
                android:id="@+id/bNo"
                style="@style/Widget.MaterialComponents.Button.OutlinedButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="NO" />
        </com.google.android.material.button.MaterialButtonToggleGroup>

Я слушаю изменения, происходящие в этой ToggleGroup, как это

toggleGroup.addOnButtonCheckedListener { group, checkedId, isChecked ->
//            println("checkedId ${checkedId} $isChecked")
            if (checkedId == R.id.bYes){
                println("yes is checked "+1)
            }else{
                println("no is checked "+0)
            }
        }

Но что происходит, обе кнопки проверены когда я просто переключаюсь с ДА на НЕТ. Я получаю логи как это

I/System.out: yes is checked 1
I/System.out: no is checked 0

всякий раз, когда я переключаюсь с ДА на НЕТ. Разве это не должно дать мне только кнопку, которая отмечена, а не кнопку, которая не отмечена?

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

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вы должны отфильтровать отмеченную кнопку с флагом isChecked:

toggleGroup.addOnButtonCheckedListener { group, checkedId, isChecked ->
    if(isChecked) {
        when(checkedId) {
            R.id.bYes -> println("YES is checked")
            R.id.bNo -> println("NO is checked")
        }
    } else {
        when(checkedId) {
            R.id.bYes -> println("YES is not checked")
            R.id.bNo -> println("NO is not checked")
        }
    }
}
0 голосов
/ 27 марта 2020

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

toggleGroup.check(R.id.bYes) // Checks a specific button
toggleGroup.uncheck(R.id. bYes) // Unchecks a specific button
toggleGroup.clearChecked()
...