Epoxy:如何使用@AutoModel 注释并在没有控制器的情况下处理点击?

Epoxy : how to use the @AutoModel annotation and handle clicks without controller?

我开始使用 epoxy 库,因为我正在寻找一个库,以便在使用 RecyclerView 组件时编写更少的代码。

EpoxyRecyclerView 似乎是一个很棒的组件,因为您可以简单地给出模型(基本上是一个简单的列表),这要归功于 setModels 方法。

问题 1

第一个问题是:是否可以在不使用控制器的情况下自动为模型设置 id(使用 @AutoModel?)?

例如,我有以下 DataBindingEpoxyModel class :

@EpoxyModelClass(layout = R.layout.item_header)
abstract class HeaderModel
  : DataBindingEpoxyModel()
{

  @StringRes
  @EpoxyAttribute
  var title: Int? = null

}

我在 Fragment 中这样使用它:

val models = mutableListOf<EpoxyModel<*>>()
models.add(HeaderModel_().title(R.string.catalogue_header_categories_title)
//  [...]
 recyclerView?.setModels(models)

此代码崩溃是因为我没有为 HeaderModel_() 实例设置 idAutoModel 注释只能在一个字段上使用,那么有没有办法在没有控制器的情况下自动为我的模型实例设置一个 id?

问题 2

第二个问题是:是否可以在不使用控制器的情况下处理点击?

使用问题 1 的代码,如何处理对布局的多个小部件的单击(在我的例子中,单击 TextView 或单击 itemView)?有没有一种方法可以覆盖 DataBindingEpoxyModel 使用的 holder,以便直接处理对 holder 的点击?

在我的例子中,我不想将 OnClickListener 定义为我的 HeaderModel 的属性,因为我想为 HeaderModel 类型的所有模型定义相同的行为(不使用控制器)。

提前感谢您的帮助!

编辑: 我找到了问题 2 的答案。我只需要覆盖 DataBindingEpoxyModelbind 方法之一。但是我没有找到一种方法来自动将 id 设置为没有控制器和 @AutoModel 注释的模型。

这里是第一个问题的 github 回购的答案:

There is no way to automatically set an id (besides automodel, which I wouldn't recommend these days anyway) - you should always set an id manually on each model. It is best to do this by setting a human readable string. This is detailed more in the wiki