M.P*_*roy 2 android kotlin android-databinding
我正在尝试OnClickListener为<include>d布局设置a,但在编译时收到数据绑定错误,指出该数据绑定“找不到参数类型为android.view.View.OnClickListener的属性'android:onClick'的设置器”。
这里的上下文是我正在使用数据绑定来膨胀包含的布局,以便可以从viewModel绑定到包含布局的传递值到其中。
我为数据绑定表达式尝试了各种语法:
@{viewModel::onClickFunction}@{viewModel.onClickFunction}@{() -> viewModel.onClickFunction()}@{(view) -> viewModel.onClickFunction()}@{_ -> viewModel.onClickFunction()}我已经尝试将以上所有onClickFunction功能和功能作为OnClickListener对象。
关于Stack Overflow的其他相关问题似乎可以通过清理项目以重新生成数据绑定文件来解决此问题,但这对我没有用。
以下相关代码段:
class MyViewModel() {
val onClickFunctionAsAListener: OnClickListener = object:OnClickListener{
override fun onClick(v: View?) {
//Do something
}
}
fun onClickFunction() {
//Do something
}
}
Run Code Online (Sandbox Code Playgroud)
<layout>
<data>
<variable name="viewModel" type="full.package.name.MyViewModel"/>
</data>
<LinearLayout>
<include
layout="@layout/included_layout"
android:onClick="@{viewModel.onClickListener}"
app:customAttribute="@{`someText`}/>
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
<layout>
<data>
<variable name="customAttribute" type="String"/>
</data>
<TextView
layout="@layout/included_layout"
android:text="@{customAttribute}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)
看来您实际上无法<include>直接将OnClick处理程序分配给代码。通过在IncludedLayout数据绑定类中添加另一个变量,然后将OnClickListener分配给IncudedLayoutXML的根视图,我设法使其工作。
更改之后,我的文件如下所示:
class MyViewModel() {
val onClickFunction: OnClickListener = object:OnClickListener{
override fun onClick(v: View?) {
//Do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
<layout>
<data>
<variable name="viewModel" type="full.package.name.MyViewModel"/>
</data>
<LinearLayout>
<include
layout="@layout/included_layout"
app:onClick="@{viewModel.onClickListener}"
app:customAttribute="@{`someText`}/>
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
<layout>
<data>
<variable name="customAttribute" type="String"/>
<variable name="onClick" type="android.view.View.OnClickListener"/>
</data>
<TextView
layout="@layout/included_layout"
android:text="@{customAttribute}"
android:onClick="@{onClick}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |