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 的代码
我有 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 的代码