Android 表达式中ObservableFields上的get()
我有一个相当简单的数据绑定布局:Android 表达式中ObservableFields上的get(),android,lambda,data-binding,kotlin,android-databinding,Android,Lambda,Data Binding,Kotlin,Android Databinding,我有一个相当简单的数据绑定布局: <data> <variable name="viewModel" type="MyViewModel" /> <variable name="navigator" type="MyNavigator" /> </data> <Button android:layout_width="match_parent"
<data>
<variable
name="viewModel"
type="MyViewModel" />
<variable
name="navigator"
type="MyNavigator" />
</data>
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="@{() -> navigator.goto(viewModel.insurance, viewModel.title)}"
android:text="Click">
期望值:
当我单击按钮时,导航器将接收事件,并启动另一个活动但是,保险?
始终为空
在布局中使用此表达式时(使用.get()
):
所有操作均按预期进行,但我在构建时收到警告:
警告:警告:不要对表达式中的ObservasbleFields显式调用“get()”。这种支持很快就会被取消。”viewModel.insurance.get()'
这是Kotlin当前数据绑定实现中的一个bug吗?或者对于我为什么必须使用observeField.get()
,还有其他解释吗
注:
- 适用于Mac的AndroidStudio 3.0
- BuildTools版本:27.0.3
- android gradle插件:3.0.1
- 科特林:1.2.21
class Callbacks(val vm: MyViewModel, val navigator: MyNavigator) {
fun buttonClicked() = navigator.goto(vm.insurance.get(), vm.title.get())
}
并调用此函数onClick
android:onClick="@{() -> callbacks.buttonClicked())}"
谢谢我仍然想知道这个表达有什么不同。似乎99%的时间,对于我的代码库,我不需要
.get()
。但是由于某些原因,我确实需要它在这个表达式中。看来这个错误已经被修复了。
android:onClick="@{() -> navigator.goto(viewModel.insurance.get(), viewModel.title.get())}"
class Callbacks(val vm: MyViewModel, val navigator: MyNavigator) {
fun buttonClicked() = navigator.goto(vm.insurance.get(), vm.title.get())
}
android:onClick="@{() -> callbacks.buttonClicked())}"