我的应用程序有4个以上的不同数据模型列表。我想创建一个更通用的CommonAdapter
来扩展PagedListAdapter
这是我当前的代码
public abstract class CommonPagedListAdapter<T, VH extends RecyclerView.ViewHolder>
extends PagedListAdapter<T, VH> {
private Context mContext;
private ArrayList<T> mArrayList;
public abstract void onItemClick(T model, int position);
public abstract int getLayoutResId();
protected CommonPagedListAdapter(Context context, ArrayList<T> arrayList,
@NonNull DiffUtil.ItemCallback<T> diffCallback) {
super(diffCallback);
this.mContext = context;
this.mArrayList = arrayList;
}
@NonNull
@Override
public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//what should i return here?
View view = LayoutInflater.from(mContext).inflate(getLayoutResId(),parent,false);
return (VH) new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
//what should i do here?
// holder
}
class ItemViewHolder extends RecyclerView.ViewHolder {
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
我正在使用Android Paging Library中的PagelListAdapter我想知道几件事:-我将使用不同的ViewHolders,应该在onCreateViewHolder
中设置什么?-在onBindViewHolder
中应该设置什么?-这真的是使CommonPagedListAdapter
可扩展和可维护的正确方法吗?
我有一个类似的问题,我试图创建一个适配器以用于多种不同的列表类型。我最终得出的结论是,最好仅对每种列表类型使用单独的适配器,因为这避免了必须制作非常大的“通用”适配器类,而这又违背了“单一责任”原则。这样,每个适配器都变得更小,更易于维护且更加灵活。
但是,如果您真的想对相似的项目使用单个适配器,我通常的做法是为每种项目类型创建唯一的ViewHolders,然后使用switch语句或类似方法在onBindViewHolder中相应地绑定它们。为此,您需要在适配器中覆盖一个名为getItemViewType
的附加方法。
有一个非常好的指南,介绍了如何创建可以处理Codepath上不同视图类型的适配器:https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView