提问者:小点点

SwitchCompat onClick未从XML布局激发


我们在out project中使用数据绑定,因此不在代码中实例化控件,而是在布局XML中这样做。我们在整个应用程序中使用了所有的UI控件,而且效果很好。问题是我现在在布局中添加了switchcompat控件。它只有onclick(未触发),而没有您希望从SwitchCompat中获得的oncheckedchange,对吗?

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="viewModel"
            type="music.queue_ui.list.QueueListViewModel" />
    </data>

    <androidx.appcompat.widget.SwitchCompat
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="@{() -> viewModel.toggleHeader()}" />
</layout>

toggleheader从不被调用:-(

package music.queue_ui.list

import android.widget.Toast
import androidx.lifecycle.ViewModel
import io.reactivex.disposables.CompositeDisposable


class QueueListViewModel(
) : ViewModel() {

    private val disposables = CompositeDisposable()

    fun toggleHeader() {
        // This never gets hit by SwitchCompat `onClick`. 
        // Why??????
        Toast.makeText(
            context, "SwitchCompat Clicked",
            Toast.LENGTH_LONG
        ).show()
    }

    override fun onCleared() {
        super.onCleared()
        disposables.clear()
    }
}

有人知道有什么好办法吗?


共1个答案

匿名用户

使用:

android:onCheckedChanged="@{(v,checked)->viewModel.toggleHeader(checked)}"