5

目前我有它,以便适配器可以引用其中的所有模型。但是让演示者只拿着模型并且适配器可以简单地引用它们会更好吗?

例如:

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

private Presenter presenter;

public Adapter(Presenter presenter){
    this. presenter = presenter;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    Model m = presenter.getModels().get(position);
    // bind model to view holder
}

@Override
public int getItemCount() {
    return presenter.getModels().size();
}


}

这样,当 Presenter 获取更多模型时,它只是getAdapter().notfiyDataSetChanged();在获取之后调用。

4

2 回答 2

5

你真的可以选择任何一种方式。有人会说将适配器视为您的视图的一部分并使其尽可能愚蠢,但如果您做得对,让适配器保存数据肯定是有好处的。

例如,我使用一个带有泛型的抽象基础适配器,它包含一个数据对象列表来驱动recyclerview。它为列表提供了所有标准的 CRUD 操作(添加、更新、删除、移动等)。这些方法还处理通知适配器更改,因此我的客户端代码不必担心它。它只是将一个对象交给适配器或告诉它删除/更改一个对象,然后适配器处理其余的。

这里最大的好处是大大减少了用于 CRUD 操作和数据集更改通知的重复样板代码数量,这些代码在与回收视图交互的各个参与者之间进行。如果您有超过一两个屏幕上的回收站视图,那么这种节省会迅速增加,使其比盲目地遵守口头禅更有益。

于 2016-06-23T20:51:12.287 回答
4

通常 Adapter 被认为是 View 的一个实现细节。

演示者不应该知道查看实现细节。

适配器的工作是保存一组项目并将其发布到视图。适配器不应该知道 Presenter、模型、其他视图等。

据我了解,适配器的数据流:

模型 -> 演示者 -> 视图 -> 适配器 -> 项目视图

控制流程相反,最好跳过适配器。

随意在项目的问题中提出问题。

于 2016-06-25T18:23:27.367 回答