1:首先创建 ViewHolder 来存放 view
public class BaseViewHolder extends RecyclerView.ViewHolder {
//定义一 数组,存放view。
private SparseArray views = new SparseArray<>();
public BaseViewHolder(@NonNull View itemView) {
super(itemView);
}
public <T extends View> T getView(int id) {
//如果没有存储,通过itemView 的findViewById 拿到相应的控件。
View view;
view = views.get(id);
if (view == null) {
view = itemView.findViewById(id);
if (view != null) {
views.put(id, view);//存储起来.可以提高性能.
}
}
return (T) view;
}
}
2 写一个适配器 继承上面的 Baseviewholder
//抽象类.需要子类实现两个抽象方法。一个是用来生成view,另一个是用来渲染view。
public abstract class BaseAdapter extends RecyclerView.Adapter {
public List data = new ArrayList<>();
public void refreshData(List<T> dataList) {
data.clear();
data.addAll(dataList);
notifyDataSetChanged();
}
public T getData(int position) {
return data.get(position);
}
//获取相应的layout文件。
public abstract int getLayoutId();
@NonNull
@Override
public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View rootView = inflater.inflate(getLayoutId(), viewGroup, false);
return new BaseViewHolder(rootView);
}
@Override
public void onBindViewHolder(@NonNull BaseViewHolder baseViewHolder, int i) {
convert(baseViewHolder, i);
}
//显示数据在相应layout对应生成view上。
public abstract void convert(BaseViewHolder baseViewHolder, int position);
@Override
public int getItemCount() {
return data.size();
}
}
这样 我们的适配器就这样完成了
以下是我自己的适配器(演示)
public class MyAdpter extends BaseAdapter<这里是bean类> {
@Override
public int getLayoutId() {
return R.layout.rv_item_layout_three;
}
@Override
public void convert(BaseViewHolder baseViewHolder, int position) {
baseViewHolder.getView(R.id.xxx); //获取控件
getDate(position) // 可以获取 bean的数据
}
}
最后 在Activity 在 实现 adapter调用
MyAdpter adp = new MyAdpter()
adp. refreshData(获取数据)