Airbnb EpoxyModel не работает в функциональных модулях / проектах библиотек в Android - PullRequest
0 голосов
/ 21 января 2020

EpoxyModels не компилируются при использовании внутренних функциональных модулей Android приложения.

@EpoxyModelClass(layout = R.layout.layout_foo) //an annotation argument must be a compile-time constant here
abstract class  FooModel : EpoxyModelWithHolder<FooModel.FooHolder>() 
{
            ...
            ...

    class FooHolder : BaseEpoxyHolder() 
     {
       val textViewTitle: TextView by bind((R.id.textViewTitle))
       //bind is the method borrowed from [here](https://github.com/airbnb/epoxy/blob/963ef0fd850bd379da7b0be6a2ada25d01ae0ee7/kotlinsample/src/main/java/com/airbnb/epoxy/kotlinsample/helpers/KotlinEpoxyHolder.kt#L20)
     }
}

Приведенный выше код жалуется на «аргумент аннотации должен быть постоянной времени компиляции» для layout = R.layout .layout_foo line.

Опять-таки, основываясь на документации, нужно использовать Butterknife для библиотечных проектов (функциональные модули в некоторой степени являются библиотечным проектом), которые генерируют классы R2 на основе this

Ниже приведен модифицированный код с Butterknife, который также, я думаю, является излишним. Не уверен, почему я не смог просто выполнить findviewbyId.

ModelClass(layout = R2.layout.layout_foo)
abstract class  FooModel : EpoxyModelWithHolder<FooModel.FooHolder>() {

    @EpoxyAttribute
    lateinit var fooDto: Foo

    override fun bind(holder: FooHolder) {
        holder.textViewTitle.text = fooDto.title
    }

    class FooHolder : BaseEpoxyHolder() {
        @BindView(R2.id.textViewTitle) lateinit var textViewTitle: TextView
    }
}

Ниже приведена ошибка, исходящая от видоискателя с ножом

kotlin .UninitializedPropertyAccessException: свойство lateinit textViewTitle не было инициализировано

Благодарим вас за помощь.

1 Ответ

1 голос
/ 22 января 2020

Как сказано в:

https://github.com/airbnb/epoxy/issues/819#issuecomment -576728923

Существует проблема с использованием этой аннотации в проекте библиотеки.

Для момент, когда вы можете использовать:

@EpoxyModelClass
abstract class MyModel : EpoxyModelWithHolder<MyHolder>() {

    override fun getDefaultLayout(): Int {
        return R.layout.my_layout
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...