1.简单封装

前言:

RecyclerView.Adapter的用法这里就不再赘述,新入行或者还在用ListView的小伙伴 请自行百度;

1.1 分析:

我们来分析一下每个 Adapter 都有的东西,及通用的逻辑: 
数据集合: 数据 List<T> mData; 布局加载器 LayoutInflater; 上下文 Context; 事件监听 Listener;
方法: 设置及取出数据; getItemCount判空;
那么我们的 BaseAdapter 如下所示; 我们使用了泛型<T>; 其余代码也比较简单易懂;
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
protected LayoutInflater layoutInflater;
protected Context mContext;

/**
* 点击事件回调监听; 条目点击用 holder.itemView.setOnClickListener
* 子类调用需要判 null
*/
protected AdapterListener mListener;
/**
* 数据集合
*/
protected List<T> mData;

public BaseAdapter(Context context, List<T> data) {
this(context,data,null);
}
public BaseAdapter(Context context, List<T> data , AdapterListener listener) {
this.mContext = context;
this.mListener = listener;
this.mData = data;
layoutInflater = LayoutInflater.from(context);
}

public List<T> getData() {
return mData;
}

public void setData(List<T> data) {
mData = data;
notifyDataSetChanged();
}

public AdapterListener getListener() {
return mListener;
}

public void setListener(AdapterListener listener) {
mListener = listener;
}

@Override
public int getItemCount() {
//数据集合为 null 时返回0;
if(mData != null)
return mData.size();
return 0;
}

@Override
public int getItemViewType(int position) {
return getMyType(position);
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return createMyHolder(parent,viewType);
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder recHolder, final int position) {
onBindMyData(recHolder,position);
}

/**
* 默认的条目类型, 如果多条目类型, 自定义该方法; 根据 position 获取对象实体, 再判断条目类型;
*/
protected int getMyType(int position){
return 0;
}

/**
* 绑定 holder
*/
protected abstract RecyclerView.ViewHolder createMyHolder(@NonNull ViewGroup parent, int viewType);

/**
* 绑定数据,绑定监听
*/
protected abstract void onBindMyData(@NonNull RecyclerView.ViewHolder recHolder, final int position);

public interface AdapterListener {
public void onItemClick(View v, int position);
}

具体的 Adapter 这样写:

public class TestAdapter extends BaseAdapter<DateBean> {

    public TestAdapter (Context context, List<FamilyDateBean> data, AdapterListener listener) {
super(context, data, listener);
} @Override
protected RecyclerView.ViewHolder createMyHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(layoutInflater.inflate(R.layout.item_family_date, parent, false));
} @Override
protected void onBindMyData(@NonNull RecyclerView.ViewHolder recHolder, int position) {
ViewHolder holder = (ViewHolder) recHolder;
DateBean bean = mData.get(position);
holder.tvWeek.setText(bean.getWeek());
holder.tvDate.setText(bean.getDate());
//设置点击事件监听
holder.itemView.setOnClickListener(v->mListener.onItemClick(v,recHolder.getLayoutPosition()));
  }

static class ViewHolder extends RecyclerView.ViewHolder{ @BindView(R.id.tv_week) TextView tvWeek; @BindView(R.id.tv_date) TextView tvDate; ViewHolder(View view) { super(view); ButterKnife.bind(this, view); } } }

回到顶部

孟老板 BaseAdapter封装 (一) 简单封装的更多相关文章

  1. 孟老板 BaseAdapter封装(五) ListAdapter

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  2. 孟老板 BaseAdapter封装 (二) Healer,footer

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  3. 孟老板 BaseAdapter封装 (三) 空数据占位图

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  4. 孟老板 BaseAdapter封装(四) PageHelper

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  5. 孟老板 ListAdapter封装, 告别Adapter代码 (上)

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  6. 孟老板 ListAdapter封装, 告别Adapter代码 (三)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...

  7. 孟老板 ListAdapter封装, 告别Adapter代码 (四)

    BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...

  8. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  9. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

随机推荐

  1. Run-Time Check Failure #0,The value of ESP was not properly saved 错误解决

    调用DLL函数,出现错误 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function c ...

  2. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  3. 续订Jetbrain学生包

    今天打开IDEA和Pycharm都不约而同的告诉我我的账号无法使用学生包了 此刻我的内心是: 冷静下来我算了算,嗷,原来是一年的订阅期到了,那就简单了,直接续订吧,唉.其实续订和重新认证是一样的. 首 ...

  4. windows桌面图标及任务管理栏丢失

    背景环境: 卸载某些软件,如Auto CAD 2011 之后,会出现桌面图标和任务栏丢失的现象,某些重要文件没有保存或者不能注销及重启的动作 1:按组合键Ctrl+Shift+Esc,键调出任务管理器 ...

  5. XAMPP修改Apache默认网站目录htdocs的详解

    XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软件站集成环境包,大量站长在使用.正确安装好XAMPP后,默认是必须将php程序放到xampp\htdocs文件 ...

  6. Elasticsearch数据库优化实战:让你的ES飞起来

    摘要:ES已经成为了全能型的数据产品,在很多领域越来越受欢迎,本文旨在从数据库领域分析ES的使用. 本文分享自华为云社区<Elasticsearch数据库加速实践>,原文作者:css_bl ...

  7. C++虚函数 - 静态函数能否为虚函数 .

    1.virtual与静态函数 C++中,静态成员函数不能被声明为virtual函数. 例如,下面的程序会编译失败. #include<iostream> class Test { publ ...

  8. 黄衫女子,黄衫好.png

    正想着团队项目中数据该如何解析,就收到了来自软工课程组的一件小黄衫,真是意外之喜.详问其来源,竟是因结对项目做的"较好"而来,顿感受之有愧. 结对项目是两人对文件系统的一个小模拟, ...

  9. Ubuntu相关系统配置问题

    1.Ubuntu 16.04下安装VMware Tools 由于下载的是ubuntu-16.04.3-desktop-amd64,需要安装vmware tools,原来提取提取文件再解压的方式比较麻烦 ...

  10. 《SystemVerilog验证-测试平台编写指南》学习 - 第1章 验证导论

    <SystemVerilog验证-测试平台编写指南>学习 - 第1章 验证导论 测试平台(testbench)的功能 方法学基础 1. 受约束的随机激励 2. 功能覆盖率 3. 分层的测试 ...