博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView的使用,打造一个通用的Adapter
阅读量:7254 次
发布时间:2019-06-29

本文共 2075 字,大约阅读时间需要 6 分钟。

RecyclerView 在Android开发中可以说是使用频率非常高的组件了,本着不造重复轮子的原则,今天我们来打造一个通用且能快速使用的Adapter。

首先我们看看以前的写法:

public class DemoAdapter extends RecyclerView.Adapter {    @NonNull @Override    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {      switch (viewType){        case 1:return new ViewHolder1();        case 2:return new ViewHolder2();        ......      }      return null;    }    @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {      //Todo      ......    }    @Override public int getItemCount() {      return list.size();    }  }复制代码

从上面的伪代码可以看出,Adapter需要重写onCreateViewHolder和onBindViewHolder两个方法

  • onCreateViewHolder负责创建ViewHolder
  • onBindViewHolder负责刷新ViewHolder数据

想要打造一个通用的Adapter,就要在Adapter里处理好上面两个方法

如何创建ViewHolder

1.首先我们要创建一个ViewHolder基类

public abstract class FastViewHolder
extends RecyclerView.ViewHolder{ public FastViewHolder(View itemView) { super(itemView); } protected void onCreate(){ } public
T findViewById(int id) { return itemView.findViewById(id); } public abstract void refreshItem(T bean);}复制代码

我们在基类里声明了创建和刷新两个方法,分别对应Adapter的onCreateViewHolder和onBindViewHolder方法,这样我们只需要处理ViewHolder里的方法即可,无需再理会Adapter的逻辑

2.把ViewHolder实现类添加到FastAdapter

FastAdapter fastAdapter = new FastAdapter(context);  fastAdapter.addItem(TextViewHolder.class);复制代码

3.利用反射创建ViewHolder实现类

FastViewHolder fastViewHolder = fastBaseViewHolderClass.getConstructor(View.class).newInstance(itemView);  fastViewHolder.onCreate();复制代码

4.itemView的创建

ViewHolder的构造方法需要itemView,我们可以在ViewHolder里添加一个注解,类似下面这样:

@RecyclerItemLayoutId(R.layout.item_text)public class TextViewHolder extends FastViewHolder
{}复制代码

如何刷新数据

Adapter刷新时需要通知ViewHolder实现类的方法,那如何实现?

因为ViewHolder实现类是继承FastViewHolder的,所以我们只需像下面这样即可:

@Override public void onBindViewHolder(FastViewHolder holder, int position) {    holder.refreshItem(mDatas.get(position).getData());  }复制代码

然后ViewHolder的实现类就能接收到refreshItem方法,做相应的业务代码即可。

Demo

,欢迎大家给小星星

转载于:https://juejin.im/post/5aefccc06fb9a07ac162567d

你可能感兴趣的文章
Objective-C基础笔记(2)@property和@synthesize
查看>>
Android系统开发(1)——GCC编译器的编译和安装过程
查看>>
详解Python模块导入方法
查看>>
mysql一些权限相关操作,数据库可以远程连接或者说用IP地址可以访问
查看>>
关于c#(vs)dategridview控件继承不能修改的问题
查看>>
JAVA通过使用sort方法排序
查看>>
跨域CORS 、第二章
查看>>
一秒去除Win7快捷方式箭头
查看>>
Linux上Simplescalar/ARM的安装和运行文档
查看>>
中断是CPU的机制
查看>>
DoD and DoR
查看>>
golang 资源
查看>>
关于FileFOutputStream应用中的FileNotFoundException问题
查看>>
[产品设计] - 设计理念
查看>>
关于gitblit成功启动,但在阿里云外网地址无法访问的问题
查看>>
C++访问MySql
查看>>
1056. 组合数的和(15)
查看>>
Git基础教程(一)
查看>>
css解决select下拉表单option高度的办法
查看>>
「洛谷P1198」 [JSOI2008]最大数 解题报告
查看>>