現役プログラマのプログラミング教室@岡崎市康生, Android/iOS(Swift/Kotlin)のアプリ開発、デジタル漫画制作を主軸事業としています。

事件です。Kotlin + Epoxy + RecyclerView+ Glideでハマりました。事件の解決までの足取り。

前置き。まだ調査段階でのメモです。

表題のepoxyRecyclerViewglideを使った画像読み込みをやろうとsampleをベースに自分で作成しましたが、どうしても画像が表示されず、、、

1日悩んで修正はできたのですが、結論は導けずw

ですので不本意ながら、検索しても情報が少なかったのでやったことだけ記載します。

  1. ImageModelにあたるモデルのクラス名を変更
  2. package-info.javaでEpoxyDataBindingLayoutsを利用
  3. 自動のDataBindingをやめた

これで表示されるよになりました。

上記で修正されたので、ここから推測したのは

元々入っていたDataBindingとepoxyで自動生成するモデルのバインディングが競合してしまっていた。

です。

EpoxyのSampleモデルImageModelはこんな感じ

@EpoxyModelClass(layout = R.layout.list_item)
abstract class ImageModel : EpoxyModelWithHolder<ImageHolder>() {

    @EpoxyAttribute
    lateinit var imageUrl: String
    @EpoxyAttribute
    lateinit var text: String

    @EpoxyAttribute
    var preloading: Boolean = false

    override fun bind(holder: ImageHolder) {
        holder.glide.loadImage(imageUrl, preloading).into(holder.image)
        holder.text.text = text
    }

    override fun unbind(holder: ImageHolder) {
        holder.glide.clear(holder.image)
        holder.image.setImageDrawable(null)
    }
}

class ImageHolder : KotlinHolder(), Preloadable {
    val image by bind<ImageView>(R.id.image_view)
    val text by bind<TextView>(R.id.text_view)
    val glide by lazy { Glide.with(image.context) }
    override val viewsToPreload by lazy { listOf(image) }
}

結局、最終的にはpackage-info.javaでモデル自動生成の記述をなくしました。なにげにsampleにもなかったのですw。

あ、別問題ですが、package-info.javaを作成したときにコピペを利用しないと認識してくれないことがありました、、、なんでしょうこれ???