1

我想在MaterialButtonToggleGroupwith上使用 DataBinding MaterialButton,但是似乎没有onButtonChecked属性MaterialButtonToggleGroup

<com.google.android.material.button.MaterialButtonToggleGroup
    android:id="@+id/majors_toggleGroup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:onButtonChecked="@{(group, buttonId, isChecked) -> viewModel.recordIndex(group.indexOfChild(group.findViewById(buttonId)))}">

它不编译,显示: Cannot find a setter for <com.google.android.material.button.MaterialButtonToggleGroup android:onButtonChecked> that accepts parameter type 'lambda'. 有什么帮助吗?(app: onButtonChecked也不起作用)

4

2 回答 2

1

我有一个类似的问题并设法像这样解决它:

@BindingAdapter("checkedBtnAttrChanged")
@JvmStatic
fun setToggleGroupChangedListener(toggleGroup: MaterialButtonToggleGroup, listener: InverseBindingListener) {
    toggleGroup.addOnButtonCheckedListener { group, checkedId, isChecked -> listener.onChange() }
}


@BindingAdapter("checkedBtn")
@JvmStatic
fun setChecked(toggleGroup: MaterialButtonToggleGroup, salaryIsPartTime: Boolean?) {
    if (salaryIsPartTime == true) {
        toggleGroup.check(R.id.toggle_is_parttime)
    } else {
        toggleGroup.check(R.id.toggle_is_fulltime)
    }
}

@InverseBindingAdapter(attribute = "checkedBtn")
@JvmStatic
fun getChecked(toggleGroup: MaterialButtonToggleGroup): Boolean {
    when (toggleGroup.checkedButtonId) {
        R.id.toggle_is_fulltime -> return false
        R.id.toggle_is_parttime -> return true
    }

    return false
}

您当然可以使用与布尔值不同的输入,但想法应该是相同的。

于 2020-12-03T10:41:50.737 回答
0

似乎没有运气,我必须手动设置OnButtonCheckedListener()它们:

单选听力:

binding.fruitsToggleGroup.addOnButtonCheckedListener { group, buttonId, isChecked ->
    if (isChecked)        //only listen for check event, ignore uncheck event
        val checkedIndex = group.indexOfChild(findViewById(buttonId))

        viewModel.setFruitIndex(checkedIndex)
     }
}

多选听力:

binding.majorsToggleGroup.addOnButtonCheckedListener { group, _, _ ->
    val checkedIndexes = mutableListOf<Int>()        //recording each uncheck/check event

    group.checkedButtonIds.forEach {
        val index = group.indexOfChild(findViewById(it))

        checkedIndexes.add(index)
    }

    viewModel.setMajorIndexes(checkedIndexes)
}
于 2020-12-03T17:24:52.297 回答