android - 数据绑定错误****msg:无法解析为属性的访问器或侦听器
问题描述
即使我从 Android Studio 收到此错误:
- 从现有(和正在工作的)项目复制,有任何错误
- 在新项目中更改了包名称
这是xml:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" alias="v"/>
<variable
name="viewModel"
type="....MyModel"/>
</data>
<android.support.v4.widget.NestedScrollView
android:id="@+id/fragment_question"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical">
<TextView
style="@style/QText.Big"
android:id="@+id/service_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Service name"
android:text="@{viewModel.serviceName}"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:visibility="@{viewModel.isDateType ? v.VISIBLE : v.GONE}">
<TextView
style="@style/QText.Big"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Date:"/>
<TextView
style="@style/Text.DateTime"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/date_icon"
android:text="@{viewModel.dateAnswer}"
android:onClick="@{viewModel.pickDate}"/>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</layout>
这是我的视图模型:
public class QuestionViewModel extends AbsQuestionViewModel {
public final ObservableString dateAnswer = new ObservableString();
private FragmentQuestionBinding binding;
public QuestionViewModel(Context context, FragmentQuestionBinding binding) {
super(context);
}
public boolean isLabelType() {
return answerType != null && (answerType.equals(ANS_TYPE_LABEL) || answerType.equals(ANS_TYPE_GEOPHOTO));
}
public boolean isDateType() {
return answerType != null && (answerType.equals(ANS_TYPE_DATE) || answerType.equals(ANS_TYPE_DATETIME));
}
public void pickDate(View v) {
DateTime.pickDate(context, dateAnswer::set);
}
}
我不明白的是我得到的错误只是pickDate
属性。例如,我没有收到错误serviceName
或dateAnswer
属性。
我试图清理和重建项目并使缓存无效并重新启动。
这是我得到的确切错误:
****/ data binding error ****msg:Could not resolve ...MyModel.pickDate as an accessor or listener on the attribute. file:/.../app/src/main/res/layout/fragment_q.xml loc:90:43 - 90:60 ****\ data binding error ****
解决方案
现有代码在使用数据绑定在 xml 中添加点击侦听器时出错
改变
android:onClick="@{viewModel.pickDate}"
至
android:onClick="@{(v)-> viewModel.pickDate(v)}"
推荐阅读
- powershell - PowerShell ForEach 循环、通配符、限制具有多个子文件夹的集合内容的问题
- ajax - 使用 ajax 提交 symfony 5 表单
- python - 无法导入:“从 trello 导入 TrelloClient”py-trello 和 trello 包(replit)
- java - Springboot如何强制开发者在每个api之前写CustomAnnotation
- c# - 如何使用字符串作为主键编辑单个对象 CRUD
- assembly - .data 部分中汇编程序指令的混淆
- c++ - time() 函数在 Microsoft C++ 中运行缓慢
- c# - 如何向 WPF 桌面工具添加浮动操作按钮?
- angular - 路由器元素显示两次
- python - 如何对列表信息的某些部分进行分组?