gpt4 book ai didi

android - RecyclerView 通用适配器

转载 作者:行者123 更新时间:2023-11-30 00:36:35 24 4
gpt4 key购买 nike

尝试为 RecyclerView 创建通用适配器。
已经探索了其他解决方案: RecyclerView generic adapter with DataBinding
Add click listener to Generic RecyclerView Adapter
https://github.com/ravirupareliya/Recyclerview-Generic-Adapter/blob/master/app/src/main/java/com/rrr/genericrecyclerview/adapter/RecyclerAdapter.java

但是想要以有点不同的方式实现它。
这是我的适配器的样子:

public abstract class GenericAdapter<T> extends RecyclerView.Adapter<BaseHolder<T>> {

private OnRecyclerItemClickListener mListener;
private List<T> mItems;
private final LayoutInflater mLayoutInflater;

public GenericAdapter(Context context) {
mLayoutInflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mItems = Collections.emptyList();
}

@Override
public BaseHolder<T> onCreateViewHolder(ViewGroup parent, int viewType) {
// assume that viewType is a resource id returned by getItemViewType
// also other solutions are welcome
View view = mLayoutInflater.inflate(viewType, parent, false);

// TODO: how to create the view holder ??
}

@Override
public void onBindViewHolder(BaseHolder<T> holder, int position) {
T item = mItems.get(position);
holder.onBind(item, mListener);
}

@Override
public int getItemCount() {
return mItems != null ? mItems.size() : 0;
}

public void setItems(List<T> items) {
mItems = items;
notifyDataSetChanged();
}

public void setItemClickListener(OnRecyclerItemClickListener listener) {
mListener = listener;
}
}

这是一个基本 View 持有者,我想从中扩展所有其他持有者:

public abstract class BaseHolder<T> extends RecyclerView.ViewHolder {

public BaseHolder(View itemView) {
super(itemView);
}

public abstract void onBind(T item, OnRecyclerItemClickListener listener);
}

问题出在onCreateViewHolder方法上。
如何创建 View 持有者?
我应该以某种方式实现抽象 BaseHolder 还是应该以某种方式更改适配器类声明扩展,即这里的 BaseHolder RecyclerView.Adapter> 应该是 BaseHolder 的一些通用实现?我试过了 > 但它不起作用

提前感谢您的任何建议

最佳答案

附言已经很久了,但是如果有人感兴趣,
当时我解决了它并发表在Generic RecyclerView Adapter library .
它最终使创建适配器变得非常容易。
我仍在多个生产项目中使用它。

编辑:所以适配器最终看起来像:

public abstract class GenericRecyclerViewAdapter<T, L extends BaseRecyclerListener, VH extends BaseViewHolder<T, L>> extends RecyclerView.Adapter<VH> {

@Override
public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);

// ...
}

因此,ViewHolder 的创建被委托(delegate)给适配器实现,即:

public class SimpleAdapter extends GenericRecyclerViewAdapter<User, OnRecyclerItemClickListener, UserViewHolder> {

// ...

@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// or return here any specific ViewHolder according to the viewType
return new UserViewHolder(inflate(R.layout.item_user, parent), getListener());
}
}

ViewHolder 是:

public abstract class BaseViewHolder<T, L extends BaseRecyclerListener> extends RecyclerView.ViewHolder {
// ...
}

关于android - RecyclerView 通用适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43320826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com