【发布时间】:2019-05-02 09:22:34
【问题描述】:
我有以下 Wrapper 类
class ApiWrapper<I, O>(
val response: LiveData<Resource<O>>,
val call: (I?) -> Unit
) {
val loading = map(response) { it.status == RequestState.LOADING }
}
我有以下数据绑定表达式
<com.google.android.material.button.MaterialButton
android:id="@+id/signInBtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:enabled="@{!vm.login.loading}"
android:onClick="@{()->vm.login.call(vm.auth)}"
android:text="@string/sign_in"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
ViewModel 中的login 变量包含来自存储库的包装器对象(为简洁起见,忽略详细信息)。
现在当我运行时,我得到了这个异常
[databinding] {"msg":"在 com.fishlee.etc.api.ApiWrapper\u003ccom.fishlee.auth.Auth,com.fishlee.auth 类中找不到方法调用(com.fishlee.auth.Auth) .AuthState\u003e"
为什么数据绑定在包装类中找不到方法?
我有一个解决方法,即在ViewModel 中创建一个方法并从那里调用包装器的调用方法。但我真的很想直接从数据绑定表达式中调用它,这是 ApiWrapper 类的重点,如何使用 Kotlin 进行数据绑定?任何帮助将不胜感激!
【问题讨论】:
标签: android kotlin lambda data-binding invoke