我们在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()
}
}
有人知道有什么好办法吗?
使用:
android:onCheckedChanged="@{(v,checked)->viewModel.toggleHeader(checked)}"