一个RecycleView的强大adapter
前言
一般我们要在mainActivity中利用RecycleView展示一个列表数据的时候,adapter都是类似以下写法:
public class NameAdapter<T> extends RecyclerView.Adapter {
protected Context mContext;
protected View mLayoutView;
protected List<T> mData;
private ViewHolder mViewHolder;
public NameAdapter(Context context, List<T> data) {
this.mContext = context;
this.mData = data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mLayoutView = LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false);
mViewHolder = new ViewHolder(mLayoutView);
return mViewHolder;
}
@Override
public int getItemCount() {
return mData == null ? 0 : mData.size();
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mViewHolder = ((ViewHolder) holder);
initData(position);
setListener(position);
}
private void initData(int position){
mViewHolder.mTvName.setText(mData.get(position).toString());
}
private void setListener(int position){
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView mTvName;
public ViewHolder(View view) {
super(view);
mTvName = (TextView) view.findViewById(R.id.tv_name);
}
}
}
然后在mainActivity中调用如下:
mNameList= Arrays.asList("小明","小红","小芳","小花","小海","小林","小叶","小虎","小柔");
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mNameAdapter = new NameAdapter<>(this, mNameList);
mRecyclerView.setAdapter(mNameAdapter);
那么有什么方法能缩减NameAdapter中的代码,使我们在使用RecycleView进行列表数据展示的时候,把NameAdapter也的更简洁些呢,下面就给大家介绍一款adapter框架,相信在使用它后,将大大缩减NameAdapter的代码
1.配置
在projected的build.gradle中配置maven:
maven { url "https://jitpack.io" }
具体配置如下:
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
在app module的build.gradle中添加依赖:
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34'
自此,配置结束.
2.写一个公共的adapter,名为ComAdapter,集成基本的初始化,加载动画等方法
public abstract class ComAdapter<T> extends BaseQuickAdapter<T, BaseViewHolder> {
protected Context mContext;
protected List<T>mData;
protected int mItemViewId;//item布局id
protected View mHeaderView;
protected View mFooterView;
public ComAdapter(int itemViewId,List<T>data,Context context) {
super(itemViewId, data);
this.mItemViewId=itemViewId;
this.mContext=context;
this.mData=data;
}
@Override
protected void convert(BaseViewHolder viewHolder, T t) {
initView(viewHolder,t);
initData(viewHolder,t);
setListener(viewHolder,t);
}
//以下代码见例子
//......
3.自己写的NameAdapter继承于ComAdapter
public class NameAdapter<T>extends ComAdapter {
private TextView mTvName;
public NameAdapter(List<T> data, Context context){
super(R.layout.item_layout,data,context);
}
@Override
protected void initView(BaseViewHolder viewHolder, Object o) {
mTvName=viewHolder.getView(R.id.tv_name);
}
//以下代码省略
//......
4.在mainActivity中的使用
声明
@BindView(R.id.recycler_view)
RecyclerView mRecyclerView;
private List<String>mNameList;
private NameAdapter mNameAdapter;
初始化
mNameList= Arrays.asList("小明","小红","小芳","小花","小海","小林","小叶","小虎","小柔");
mNameAdapter=new NameAdapter(mNameList,mContext);//初始化NameAdapter
mNameAdapter.setRecyclerManager(mRecyclerView);//设置RecyclerView特性
mNameAdapter.addHeaderView(R.layout.item_header);//添加header
mNameAdapter.addFooterView(R.layout.item_footer);//添加footer
mNameAdapter.openLeftAnimation();//设置加载动画
item点击事件
//item點擊事件
mNameAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "onItemLongClick" + position, Toast.LENGTH_SHORT).show();
}
});
item中子控件点击事件
//子空控件点击事件
mNameAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
Toast.makeText(MainActivity.this, "onItemLongClick" + mNameList.get(position), Toast.LENGTH_SHORT).show();
}
});
5.效果图

6.項目結構圖

一个RecycleView的强大adapter
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
一个RecycleView的强大adapter的更多相关文章
- 一个漂亮而强大的RecyclerView
代码地址如下:http://www.demodashi.com/demo/13470.html 简介 主要提供了简单易用强大的RecyclerView库,包括自定义刷新加载效果.极简通用的万能适配器A ...
- 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE
版权声明:欢迎转载,转载请注明出处! https://blog.csdn.net/iTaacy/article/details/76716049 使用Sublime text 3打造一个小巧但强大的G ...
- 一个漂亮而强大的自定义view
代码地址如下:http://www.demodashi.com/demo/13502.html 简介 主要提供一个漂亮而强大的自定义SeekBar,进度变化由提示牌 (sign)展示,具有强大的属性设 ...
- recycleview的基础Adapter
.封装了一个基础的adapter.,用于recycleview的快捷使用有BaseAdapter,BaseViewHolder,PAdapter,MainActivity public abstrac ...
- Istio技术与实践04:最佳实践之教你写一个完整的Mixer Adapter
Istio内置的部分适配器以及相应功能举例如下: circonus:微服务监控分析平台. cloudwatch:针对AWS云资源监控的工具. fluentd:开源的日志采集工具. prometheus ...
- 第6.5节 exec函数:一个自说自话的强大Python动态编译器
在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码. 一. 语法 1. exec(Code, globals=None, local ...
- RecycleView错误: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder
1.错误 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positi ...
- Adapter优化方案的探索
概要:使用Adapter的注意事项与优化方案本文的例子都可以在结尾处的示例代码连接中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...
- IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)
概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...
随机推荐
- UVA 10910 Marks Distribution
题意 把数字T分成N个数的和,保证这N个数中最小的数大于P.求方案数目 另f[i][j]表示把i分成j个数的和的方案数 f[i][j]=f[i][j-1]+f[i-1][j-1]+f[i-2][j-1 ...
- linux free 命令 ,讲解得比较好
解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][ ...
- Delphi中获取文件大小
大概有这些方法可以获得文件大小FileSizeByName(需要引用IdGlobal单元)GetFileSizeFileSize(不能获得正在使用的文件大小)FileSeekTFileStream.S ...
- 利用ItextSharp产PDF完整操作
记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装excel, 这时我才意识到用自带组件完全是不行的 ...
- Java IO 学习(五)跟踪三个文件IO方法的调用链
假设我们想要用Java读取一个二进制文件,有好几种方式,本文会选取其中比较典型的三种方式进行详细分析 0. 准备工作 安装openjdk-1.8.0.141(普通的jdk中涉及IO的很多代码是闭源的, ...
- Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法
类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...
- Linux Shell 参数传递多种方式
背景 最近编写ansible脚本,需要自动调用之前写好的shell脚本,由于shell脚本中包含了read命令接收用户的手动输入,为了实现ansible脚本的自动运行,不得不将手动输入转换为自动输入. ...
- 状压DP【p1879】[USACO06NOV]玉米田Corn Fields
Description 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上 ...
- 洛谷——P1469 找筷子
P1469 找筷子 题目描述 经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘 ...
- [POJ 2373][BZOJ 1986] Dividing the Path
Link: POJ 2373 传送门 Solution: 一开始想错方向的一道简单$dp$,不应该啊…… 我一开始的想法是以$cows' ranges$的节点为状态来$dp$ 但明显一个灌溉的区间的两 ...