При связывании данных Jetpack сгенерировал дублирующийся класс в том же файле, что и тот же класс

Этим утром я получил ошибку, из-за которой мое приложение не установилось, и я проследил его до этой проблемы. У меня есть два одинаковых класса в одном файле. Я не хочу включать весь сгенерированный файл, так как он очень длинный.

public class AddVinDialogFragmentBinding extends androidx.databinding.ViewDataBinding implements android.databinding.generated.callback.OnClickListener.Listener {
    @Nullable
    private static final androidx.databinding.ViewDataBinding.IncludedLayouts sIncludes;
    @Nullable
    private static final android.util.SparseIntArray sViewsWithIds;
 :
    @Nullable
    private com.ui.EventHandler mHandler;
    @Nullable
    private final android.view.View.OnClickListener mCallback1;
    public class AddVinDialogFragmentBinding extends androidx.databinding.ViewDataBinding implements android.databinding.generated.callback.OnClickListener.Listener {

        @Nullable
        private static final androidx.databinding.ViewDataBinding.IncludedLayouts sIncludes;
:
}

В gradle.properties У меня есть это: android.databinding.enableV2=true

Мой макет довольно прост:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="vin"
            type="String" />
        <variable name="handler" type="com.ui.garage.handlers.EventHandler" />
    </data>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ui.AddVinDialogFragment">
    <TextView
        android:layout_width="wrap_content"
        android:text="Please enter a VIN"
        android:layout_height="wrap_content" />
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/add_vin_field"
        android:layout_width="200dp"
        android:maxLength="17"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:hint="@string/vin"
        android:text="@={vin}" />
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@+id/button"
        android:onClick="@{() -> handler.addVin(vin)}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/submit" />
</LinearLayout>
</layout>

Я использую Android Studio 3.3 Canary 3

Иногда я получаю, что в моем файле макета есть повторяющийся класс, и тогда он не может найти DataBindingComponent, Что раздражает, так это то, что это сработало вчера, и с тех пор я не менял привязку.

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

Я удалил.gradle и mobile/build/* и несколько раз выполнял очистку и перестройку, а также выход и перезапуск Android Studio.

У меня есть три файла макета с привязкой данных, и все три имеют одинаковые ошибки.

1 ответ

Удалите зависимость компилятора, она снабжена плагином связывания с 3.2.0. По крайней мере, у меня это сработало.

kapt "com.android.databinding:compiler:$gradleVersion
Другие вопросы по тегам