两个按钮都在 MaterialToggleButton Android 中选中,而只有一个应该

Both buttons are checked in MaterialToggleButton Android while only one should

我有一个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

每当我从“是”切换到“否”时。这不应该只给我选中的按钮而不是未选中的按钮吗?

如有任何帮助,我们将不胜感激。

您可以通过编程方式检查按钮。 MaterialButtonToggleGroup 提供了另一种方法来检查、取消选中和清除选中的按钮状态。

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

您必须使用 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")
        }
    }
}