使用android页面库创建通用PagedListAdapter

问题描述 投票:0回答:1

我的应用程序有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可扩展和可维护的正确方法吗?

android android-paging
1个回答
0
投票

我有一个类似的问题,我试图创建一个适配器以用于多种不同的列表类型。我最终得出的结论是,最好仅对每种列表类型使用单独的适配器,因为这避免了必须制作非常大的“通用”适配器类,而这又违背了“单一责任”原则。这样,每个适配器都变得更小,更易于维护且更加灵活。

但是,如果您真的想对相似的项目使用单个适配器,我通常的做法是为每种项目类型创建唯一的ViewHolders,然后使用switch语句或类似方法在onBindViewHolder中相应地绑定它们。为此,您需要在适配器中覆盖一个名为getItemViewType的附加方法。

有一个非常好的指南,介绍了如何创建可以处理Codepath上不同视图类型的适配器:https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.