Android: ProGuard не может найти установщик для атрибута "связать: элементы" в представлении переработчика внутри макета

Ошибка времени компиляции возникает при попытке запустить ProGuard с включенным связыванием данных.

Примечание: тот же код работает, когда proGuard отключен.

Вот сообщение об ошибке консоли

Не удается найти установщик для атрибута 'bind:itemOrders' с типом параметра java.util.List<com.example.boss.ItemOrder> на android.support.v7.widget.RecyclerView,

Вот мой макет, где я связываю представление рециркулятора, используя атрибут связывания.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto">
    <data>
        <import type="android.view.View" />
        <variable
            name="viewModel"
            type="com.example.boss.BossViewModel" />
    </data>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
                android:id="@+id/itemOrderRecyclerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                style="@style/ItemOrders"
                bind:itemOrders="@{viewModel.itemOrders}"/>
    </RelativeLayout>
</layout>

Вот мой пользовательский метод привязки данных

@BindingAdapter("bind:itemOrders")
public static void bindList(RecyclerView view, List<ItemOrder> itemOrders) {
    view.setLayoutManager(new LinearLayoutManager(view.getContext()));
    view.setAdapter(new ItemOrderAdapter(itemOrders));
}

Вот мой файл proguard-rules.pro

-keepclassmembers public class com.example.boss.BossViewModel{*;}
-keep class android.databinding.** { *; }    
-keepattributes *Annotation*    
-keepattributes javax.xml.bind.annotation.*    
-keepattributes javax.annotation.processing.*  

-keepclassmembers class ** {
    @android.databinding.BindingAdapter public *;
}

-dontwarn android.databinding.**

1 ответ

Вы должны изменить пространство имен Shcema от

xmlns:bind="http://schemas.android.com/apk/res-auto"

в

xmlns:bind="http://schemas.android.com/apk/tools"

Кроме того, вы можете удалить префикс привязки из @BindingAdapter определение - это пространство имен будет игнорироваться.

Другие вопросы по тегам