You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Kotlin):解决EpoxyModel与PagingDataEpoxyController兼容问题

EpoxyModel与PagingDataEpoxyController兼容修复方案

核心问题定位

崩溃源于EpoxyModel泛型声明错误、模型实例化语法错误、未处理item为空场景,这些问题会引发类型转换异常或空指针崩溃。


1. 修正EpoxyModel的泛型与bind逻辑

将PostCommentModel的父类指定为带ViewBinding泛型的EpoxyModel,同时移除不必要的super.bind(view)调用:

@EpoxyModelClass 
abstract class PostCommentModel : EpoxyModel<LayoutCommentBinding>() {

  @EpoxyAttribute
  lateinit var commentData : CommentData

  override fun getDefaultLayout() : Int {
     return R.layout.layout_comment_item
  }

  override fun bind(view: LayoutCommentBinding) {
         view.profileName.text = commentData.username
         // 其他视图绑定逻辑
    }
}

2. 修正模型实例化语法

Epoxy注解处理器生成的模型类后缀为下划线,修正实例化代码:

class PostCommentController( private val context: Context ) : PagingDataEpoxyController<CommentData>() {
      override fun buildItemModel(currentPosition: Int, item: CommentData?): EpoxyModel<*> {
          // 处理item为空的情况,避免空指针
          item ?: return EpoxyModel<LayoutCommentBinding>().apply {
              id("empty_comment_$currentPosition")
              layout(R.layout.layout_empty_item) // 可选:自定义空状态布局
          }
          
          return PostCommentModel_()
                   .id("comment_${item.id}_$currentPosition") // 确保id全局唯一
                   .commentData(item)
      }
}

3. 额外注意事项

  • 确保CommentData的id具备唯一性,若存在重复风险,需结合currentPosition生成全局唯一的Epoxy id
  • 分页加载过程中若出现占位符,item会为null,必须返回合法的EpoxyModel避免崩溃
  • 确认LayoutCommentBinding已正确生成,且布局文件layout_comment_item的根视图与绑定类匹配

内容的提问来源于stack exchange,提问作者B_B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:21:34