【发布时间】:2019-05-10 13:14:08
【问题描述】:
我正在尝试将 edittext onTextChanged 绑定到视图模型。
这是我的 XML:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="mvvm.f4wzy.com.samplelogin.ui.login.viewmodel.LoginViewModel" />
</data>
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="text"
android:onTextChanged="@{viewmodel.onEmailChanged}"
android:paddingStart="5dp"
android:textColor="#383838"
android:textSize="20sp"/>
</layout>
LoginViewModel.kt
class LoginViewModel(application: Application) : AndroidViewModel(application) {
fun onEmailChanged(s: CharSequence) {
//some code
}
}
kapt 给我一个关于文本更改的错误,它说:
[kapt] 发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。 ****/ 数据绑定错误 ****msg:Cannot resolve type for viewmodel.onEmailChanged
我尝试了android:onTextChanged="@{(s) -> viewmodel.onEmailChanged}" 和android:onTextChanged="@{viewmodel::onEmailChanged}",但仍然是同样的错误。
有什么帮助吗?
【问题讨论】:
-
如果您将调用更改为以下内容是否有效:
android:onTextChanged="@{(s) -> viewmodel.onEmailChanged(s)}"? -
不工作!!它甚至没有被编译。当我绑定文本时,它知道我正在编写代码,而不是字符串,但 ontextchanged XML 无法识别代码。 @JulioE.RodriguezCabañas
-
我不明白你的意思,但我的建议是从
viewmodel.onEmailChanged更改为viewmodel.onEmailChanged(s)以防万一,因为第一种方式(即你的方式)显然行不通.onEmailChanged是一个方法,应该这样调用——你在绑定表达式中使用的代码基本上是 Java 代码。 -
我会考虑在这里做two-way binding 而不是调用方法。
标签: android android-databinding