Ошибка привязки данных с привязками модели представления - PullRequest
0 голосов
/ 29 августа 2018

Я начал получать ошибки привязки данных после добавления некоторых привязок в макет, которые ссылаются на объекты LiveData из моей модели представления. Я делал это много раз в других макетах, и у меня никогда не было этой проблемы. Ошибка не проливает много света на то, что не так.

Это сообщение об ошибке

CheckoutBindingImpl.java:57: error: cannot find symbol
        java.lang.String callbackArg_0 = android.databinding.adapters.TextViewBindingAdapter.getTextString(firstName);
                                                ^
  symbol:   variable databinding
  location: variable android of type Button
/home/Droids/vv/sample-app/app/build/generated/source/kapt/stageCheckoutDebug/com/sample/databinding/FragmentCheckoutBindingImpl.java:685: error: cannot find symbol
        android.databinding.adapters.TextViewBindingAdapter.setTextWatcher(this.firstName, (android.databinding.adapters.TextViewBindingAdapter.BeforeTextChanged)null, (android.databinding.adapters.TextViewBindingAdapter.OnTextChanged)null, (android.databinding.adapters.TextViewBindingAdapter.AfterTextChanged)null, firstNameandroidTextAttrChanged);
               ^
  symbol:   variable databinding
  location: variable android of type Button
/home/Droids/vv/sample-app/app/build/generated/source/kapt/stageCheckoutDebug/com/sample/databinding/FragmentCheckoutBindingImpl.java:713: error: cannot find symbol
        android.databinding.adapters.TextViewBindingAdapter.setText(this.firstName, viewModelFirstNameGetValue);
               ^
  symbol:   variable databinding
  location: variable android of type Button
Note: /home/Droids/vv/sample-app/app/build/generated/source/kapt/stageCheckoutDebug/com/sample/injection/DaggerAppComponent.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
3 errors

Это часть макета:

    <EditText
        android:id="@+id/first_name"
        style="@style/CheckoutInputField"
        android:layout_width="0dp"
        android:layout_height="@dimen/checkout_edit_text_height"
        android:layout_marginEnd="16dp"
        android:layout_marginTop="8dp"
        android:inputType="textPersonName"
        android:text="@={viewModel.firstName}"
        app:layout_constraintEnd_toStartOf="@+id/last_name"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/first_label" />

А это модель представления:

abstract class CheckoutViewModel : ViewModel() {
    abstract var cartNavigator: CartNavigator?

    abstract val firstName: MutableLiveData<String>

    /* other stuff *
}

Реализация модели представления довольно прямолинейна:

class CheckoutViewModelImpl @Inject constructor(
    private val schedulerProvider: SchedulerProvider
) : CheckoutViewModel() {
    override val firstName = MutableLiveData<String>()

    /* other stuff *
}

Это часть автоматически сгенерированного класса, в котором выдается одна из ошибок (строка с android.databinding.adapters):

    if ((dirtyFlags & 0x800L) != 0) {
        // api target 1

        this.android.setOnClickListener(mCallback58);
        this.apple.setOnClickListener(mCallback59);
        this.back.setOnClickListener(mCallback55);
        this.debitCredit.setOnClickListener(mCallback56);
        android.databinding.adapters.TextViewBindingAdapter.setTextWatcher(this.firstName, (android.databinding.adapters.TextViewBindingAdapter.BeforeTextChanged)null, (android.databinding.adapters.TextViewBindingAdapter.OnTextChanged)null, (android.databinding.adapters.TextViewBindingAdapter.AfterTextChanged)null, firstNameandroidTextAttrChanged);
        this.paypal.setOnClickListener(mCallback57);
    }

Вот также скриншот одной из ошибок из автоматически сгенерированного файла:

Binding error

Любые предложения о том, что проблема может быть?

1 Ответ

0 голосов
/ 17 декабря 2018

Для всех тех, кто получает эту ошибку, пожалуйста, убедитесь, что вы случайно не установили android: id как "@ + id / android". В моем случае идентификатор был установлен как Android. После изменения идентификатора ошибка была исправлена.

...