2

我已经根据环氧树脂 Wiki实施了环氧树脂。我有几个List<items>. 我用第一个更新控制器List<items>,一切正常。但随后我用下一个更新List<items>,数据从List<items>Epoxy View Models 中的第二个开始正确显示,但回调没有更新为侦听器回调中的新项目对象,它们指向第一个List<items>对象。

这是用于构建模型的 Epoxy 控制器部分:

@Override
    protected void buildModels(List<Item> items) {
      for (Item item : items) {
        new ItemModel_()
              .id(item.getId())
              .title(item.getTitle())
              .clickListener((model, parentView, clickedView, position)  -> callbacks.onItemClicked(item))
              .addTo(this);
      }      
    }

环氧树脂样本中,我发现了带有 lambda 实现的 clickListener 回调。如上图:.clickListener((model, parentView, clickedView, position) -> callbacks.onItemClicked(item))。我用不同的数据列表更新控制器数据,根据用户请求List<items>更改所有数据。List<items>controller.setData(List<items>);

4

1 回答 1

0

如果您在方法上使用@ModelProp带有选项的注释,则可能会发生这种情况。[ ]Option.DoNotHashclickListener(Listener)@ModelProp(options = {Option.DoNotHash})

此选项导致生成的代码ItemModel_不比较以前的和新的侦听器,而只在模型更新后使用以前的侦听器。尝试@ModelProp不带选项使用或使用 anOption.IgnoreRequireHashCode而不是Option.DoNotHash.

@ModelProp(options = {Option.IgnoreRequireHashCode})

此外,请检查生成的ItemModel_.bind(...)方法以获取更多信息。

于 2020-10-27T13:50:08.173 回答