【发布时间】:2020-05-17 04:44:43
【问题描述】:
我为单击Chip 上的关闭图标时编写了一个自定义BindingAdapter:
@BindingAdapter("onCloseClicked")
fun Chip.onCloseClicked(onCloseClicked: () -> Unit) {
setOnCloseIconClickListener { onCloseClicked() }
}
我将它绑定在我的布局中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="viewModel"
type="com.example.playground.MyViewModel" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="chip 1"
app:closeIconEnabled="true"
app:onCloseClicked="@{() -> viewModel.chip1CloseClicked()}" />
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="chip 2"
app:closeIconEnabled="true" />
</LinearLayout>
</layout>
当我只绑定 1 个芯片时(如上),一切正常。 当我还绑定第二个芯片时:
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="chip 2"
app:closeIconEnabled="true"
app:onCloseClicked="@{() -> viewModel.chip2CloseClicked()}" />
由于数据绑定错误,应用程序不再构建:
com/example/playground/databinding/ActivityMainBindingImpl.java
错误:缺少返回语句
关于为什么会发生这种情况以及如何解决它的任何想法?
【问题讨论】:
-
您可以从您的
viewmodel添加您的chip2CloseClicked方法吗? -
只是一个没有参数的void方法,和chip1CloseClicked一样。
-
我知道,它可能包含错误。你的
viewmodel是java写的吗? -
@mahdishahbazi 不,Kotlin。 github.com/fmweigl/ChipDatabinding/blob/master/app/src/main/… 两种方法都可以从数据绑定中调用,我就是不能同时绑定。
标签: android kotlin android-databinding