【发布时间】:2019-08-29 19:11:09
【问题描述】:
在我的应用程序中,我有 4-5 个具有复杂多行类型的 RecyclerView,我使用 viewType 来区分视图。对于它们中的每一个,我确实创建了不同的适配器类,并将这些适配器用于各自的 RecyclerView 并且工作正常。但后来我尝试为我的所有 RecyclerView 只使用一个适配器类,这也可以正常工作。
我想知道的是,对多个适配器类使用一个适配器类是否很好 回收站视图?还是我应该回到以前的方式?
我对所有 RecyclerView 使用一个适配器的方式就是这样。假设我有 4 个 RecyclerView 并且我使用了 4 个适配器,但后来使用一个适配器类,我使用适配器类构造函数将一个额外的变量添加到 adapterType ,并将数据设为 ArrayList<?> ,它接受任何类型的数据。
因此,在适配器初始化之后,我检查adapterType,然后创建该类型的 ViewHolder,并且对于对象调用,我通过其各自的数据类型对对象进行类型转换,该数据类型由adapetType 确定。
下面是我的适配器构造函数:
public ContestAdapter(List<?> list, Context context, int adapterType) {
this.list = list;
this.context = context;
this.adapterType = adapterType;
try {
listener = (ContestAdapterListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(context.toString()
+ " must implement ContestAdapterListener Interface");
}
}
下面是我的 Adaper OnCreateViewHolder:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(
@NonNull ViewGroup viewGroup,
int i) {
View view;
switch (adapterType) {
case QUIZ_FRAGMENT_FLAG:
view = LayoutInflater.from(context)
.inflate(R.layout.row_contest_quiz,
viewGroup, false);
return new QuizViewHolder(view);
case MY_FRAGMENT_FLAG:
view = LayoutInflater.from(context)
.inflate(R.layout.row_contest_points_history,
viewGroup, false);
return new MyPointViewHolder(view);
case WINNER_FRAGMENT_FLAG:
if (i == VIEW_TYPE_TEXT) {
view = LayoutInflater.from(context)
.inflate(R.layout.row_text,
viewGroup, false);
return new TextViewHolder(view);
} else {
view = LayoutInflater.from(context)
.inflate(R.layout.row_contest_winner,
viewGroup, false);
return new WinnerViewHolder(view);
}
default:
view = LayoutInflater.from(context)
.inflate(R.layout.row_contest_points,
viewGroup, false);
return new PointsViewHolder(view);
}
}
这就是我如何将我的 4-5 RecyclerView 适配器类与一个适配器类结合起来,但我不知道哪个选项好,单独使用 适配器类还是像我一样使用一个适配器类?
【问题讨论】:
标签: java android performance android-recyclerview