RecyclerView 和 ViewHolder 模式 - 正确的设计方法

RecyclerView and ViewHolder pattern - proper design approach

我有 RecyclerView 列表,其中项目视图部分是根据 .xml 文件中的布局创建的(比方说 header),部分是基于列表项目以编程方式创建的。我使用了几种不同的 itemsViewTypes。

哪种方法更好?

1) 在适配器中生成视图:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    createAndAddNewViews(barsHolder);
    createAndAddNewViewsBasedOnSomeParams(param1, param2);

    // both createAndAddNewViews() and   
    // createAndAddNewViewsBasedOnSomeParams() are Adapter methods

    return holder;
}

2) 在ViewHolder中生成View:

public MyViewHolder(View itemView) {
    super(itemView);

    ... // findViewsById and so on

    createAndAddNewViews();
    createAndAddNewViewsBasedOnSomeParams(param1, param2);

    // both createAndAddNewViews() and   
    // createAndAddNewViewsBasedOnSomeParams() are ViewHolder methods
}

当然,我的示例只是为了说明情况而进行了简化。

从代码阅读的角度来看,最好在 holders 中包含视图生成逻辑。每个不同的项目在一个 class 中都有自己的创建代码。我不必处理 Adapter 中的每一项。但我不确定仅从 ViewHolder 模式设计以及内存和速度优化的角度来看是否可以。

我想知道您认为哪种方法更好,为什么。

编辑:同样适用于修改视图 (onBindViewHolder) 和 Adapter/ViewHolder 中的方法吗?

谢谢!

两种方法在性能方面是一样的。如果你有不同的 ViewHolders 不同的 itemTypes 你可以在 ViewHolder 中做在一个地方隔离属于某个 ViewHolder 的代码