EpoxyModels 在 Android 的功能 modules/library 项目中不起作用
EpoxyModels are not working in feature modules/library projects in Android
使用 Android 应用程序的内部功能模块时,EpoxyModels 未编译。
@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)
}
}
上面的代码抱怨布局 = R.layout.layout_foo 行的“注释参数必须是编译时常量”。
再次根据文档看起来,butterknife 需要用于库项目(功能模块在某种程度上是一种库项目),它将根据 this[生成 R2 类
下面是使用 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
}
}
以下是使用 butterknife 的取景器出现的错误
kotlin.UninitializedPropertyAccessException: lateinit property textViewTitle has not been initialized
如中所说:
https://github.com/airbnb/epoxy/issues/819#issuecomment-576728923
在库项目中使用该注释时出现问题。
目前您可以使用:
@EpoxyModelClass
abstract class MyModel : EpoxyModelWithHolder<MyHolder>() {
override fun getDefaultLayout(): Int {
return R.layout.my_layout
}
}
使用 Android 应用程序的内部功能模块时,EpoxyModels 未编译。
@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)
}
}
上面的代码抱怨布局 = R.layout.layout_foo 行的“注释参数必须是编译时常量”。
再次根据文档看起来,butterknife 需要用于库项目(功能模块在某种程度上是一种库项目),它将根据 this[生成 R2 类
下面是使用 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
}
}
以下是使用 butterknife 的取景器出现的错误
kotlin.UninitializedPropertyAccessException: lateinit property textViewTitle has not been initialized
如中所说:
https://github.com/airbnb/epoxy/issues/819#issuecomment-576728923
在库项目中使用该注释时出现问题。
目前您可以使用:
@EpoxyModelClass
abstract class MyModel : EpoxyModelWithHolder<MyHolder>() {
override fun getDefaultLayout(): Int {
return R.layout.my_layout
}
}