Android RecyclerView和ViewHolder图案-正确的设计方法
我有一个RecyclerView列表,其中的项目视图部分是从.xml文件中的布局创建的(比如头部),部分是基于列表项目以编程方式创建的。我使用了几种不同的itemsviewtype 哪种方法更好 1) 要在适配器中生成视图,请执行以下操作:Android RecyclerView和ViewHolder图案-正确的设计方法,android,design-patterns,optimization,android-recyclerview,android-viewholder,Android,Design Patterns,Optimization,Android Recyclerview,Android Viewholder,我有一个RecyclerView列表,其中的项目视图部分是从.xml文件中的布局创建的(比如头部),部分是基于列表项目以编程方式创建的。我使用了几种不同的itemsviewtype 哪种方法更好 1) 要在适配器中生成视图,请执行以下操作: @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from
@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中生成视图,请执行以下操作:
public MyViewHolder(View itemView) {
super(itemView);
... // findViewsById and so on
createAndAddNewViews();
createAndAddNewViewsBasedOnSomeParams(param1, param2);
// both createAndAddNewViews() and
// createAndAddNewViewsBasedOnSomeParams() are ViewHolder methods
}
当然,我的例子只是为了说明情况而简化
从代码阅读的角度来看,最好在保持器中包含视图生成逻辑。每个不同的项目在一个类中都有自己的创建代码。我不必处理适配器中的每一项。但我不确定仅仅从ViewHolder模式设计以及内存和速度优化的角度来看是否可以
我不知道你认为哪种方法更好,为什么?
编辑:是否同样适用于修改Adapter/ViewHolder中的视图(onBindViewHolder)和方法
谢谢 就性能而言,这两种方法都是相同的。如果不同的项目类型具有不同的视图持有者,则可以在视图持有者中在一个位置分离属于某个视图持有者的代码您的
适配器
应使用RecyclerView.ViewHolder
作为视图持有者类生成视图。所以,这是你的两个建议的混合。你能证明或展示这种混合应该是什么样的吗?基于:“根视图”在onCreateViewHolder()方法期间膨胀。如果您的MyViewHolder
类更改为extends RecyclerView.ViewHolder
,则它是两者的混合体;而不是像在简化案例中那样简单地创建ViewHolder
,而是分别在onCreateViewHolder()
和onBindViewHolder()中创建和绑定它。