ошибка привязки данных **** msg: не удалось разрешить как атрибут доступа или прослушиватель для атрибута - PullRequest
0 голосов
/ 02 июля 2019

Я получаю эту ошибку от 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 ****

1 Ответ

1 голос
/ 02 июля 2019

В существующем коде есть ошибка при добавлении прослушивателя при щелчке в XML с использованием привязки данных

изменение

android:onClick="@{viewModel.pickDate}"

К

android:onClick="@{(v)-> viewModel.pickDate(v)}"
...