Ошибка Android BindingAdapter.NonExistentClass

Вот он мой BindingAdapter

@InverseBindingMethods({
        @InverseBindingMethod(type = RecyclerView.class, attribute = "lastAdapter", method = "getLastAdapter"),
})
public class RecyclerViewBindingAdapter {
    @BindingAdapter(value = {"lastAdapter"}, requireAll = false)
    public static void setLastAdapter(RecyclerView view, LastAdapter adapter) {
        view.setAdapter(adapter);
    }

    @InverseBindingAdapter(attribute = "lastAdapter")
    public static LastAdapter getLastAdapter(RecyclerView view) {
        return (LastAdapter) view.getAdapter();
    }
}

Я добавил RecyclerView зависимость от моего gradle:

compile "com.android.support:recyclerview-v7:25.3.1"

Вот как я использую в моем макете:

<android.support.v7.widget.RecyclerView
 app:lastAdapter = "@{viewModel.adapter}"
 ... />

Я уже установил переменную привязки viewModel после раздувания этого макета. Но всякий раз, когда я запускаю свои коды, gradle всегда показывает следующую ошибку

Error:(48, 34) Cannot find the setter for attribute 'app:lastAdapter' with parameter type error.NonExistentClass on android.support.v7.widget.RecyclerView. 

Я могу решить эту проблему, удалив любой app:lastAdapter из моих макетов, затем очистить и восстановить, переписать эти app:lastAdapter снова attibutes, затем пересоберите проект, все работает нормально.

Это не удобное решение.

2 ответа

Решение

Как сказал Джордж в комментарии выше, "BindingAdapter принимает LastAdapter, но адаптер выглядит как другой тип", и вот как переменная присваивается:

var adapter = LastAdapter(data, BR.item).map<MenuLinked, MenuItemBinding>(R.layout.menu_item)

Кажется, библиотека DataBinding не может определить неявное объявление типа данных от Kotlin, поэтому ее необходимо определить явно:

var adapter : LastAdapter = LastAdapter(data, BR.item).map<MenuLinked, MenuItemBinding>(R.layout.menu_item)

Запустите эту команду внутри терминала Android Studio и снова соберите проект

./gradlew чистой сборки

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