代码地址如下:
http://www.demodashi.com/demo/12218.html

前言

一般我们要在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

代码地址如下:
http://www.demodashi.com/demo/12218.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

一个RecycleView的强大adapter的更多相关文章

  1. 一个漂亮而强大的RecyclerView

    代码地址如下:http://www.demodashi.com/demo/13470.html 简介 主要提供了简单易用强大的RecyclerView库,包括自定义刷新加载效果.极简通用的万能适配器A ...

  2. 使用Sublime text 3打造一个小巧但强大的Go语言开发IDE

    版权声明:欢迎转载,转载请注明出处! https://blog.csdn.net/iTaacy/article/details/76716049 使用Sublime text 3打造一个小巧但强大的G ...

  3. 一个漂亮而强大的自定义view

    代码地址如下:http://www.demodashi.com/demo/13502.html 简介 主要提供一个漂亮而强大的自定义SeekBar,进度变化由提示牌 (sign)展示,具有强大的属性设 ...

  4. recycleview的基础Adapter

    .封装了一个基础的adapter.,用于recycleview的快捷使用有BaseAdapter,BaseViewHolder,PAdapter,MainActivity public abstrac ...

  5. Istio技术与实践04:最佳实践之教你写一个完整的Mixer Adapter

    Istio内置的部分适配器以及相应功能举例如下: circonus:微服务监控分析平台. cloudwatch:针对AWS云资源监控的工具. fluentd:开源的日志采集工具. prometheus ...

  6. 第6.5节 exec函数:一个自说自话的强大Python动态编译器

    在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码. 一.    语法 1.    exec(Code, globals=None, local ...

  7. RecycleView错误: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder

    1.错误 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positi ...

  8. Adapter优化方案的探索

    概要:使用Adapter的注意事项与优化方案本文的例子都可以在结尾处的示例代码连接中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request. ...

  9. IAdjustCountOption--动态设置recycleView的itemCount(不须要改动数据源)

    概述 RecycleViewUtil是新增的一个主要针对RecycleView的一个工具类.该工具类中提供了部分RecycleView可能会使用到的方法,当中也包含了一些用来增强HeaderRecyc ...

随机推荐

  1. win7兼容visual studio 2005 的方法

    http://blog.sina.com.cn/s/blog_74d572890100xv7p.html 今天花了4个小时,结合网上的介绍,本人终于找到了一个可以在win7环境下运行visual st ...

  2. C语言高级应用---操作linux下V4L2摄像头应用程序【转】

    转自:http://blog.csdn.net/morixinguan/article/details/51001713 版权声明:本文为博主原创文章,如有需要,请注明转载地址:http://blog ...

  3. 给Input type='date'赋值

    (如有错敬请指点,以下是我工作中遇到并且解决的问题) 需要使用AngularJS动态给<input type="date" />赋值. 我使用的是ng-bind=&qu ...

  4. javascript简单拖拽(鼠标事件 mousedown mousemove mouseup)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  5. UVA 1589:Xiangqi (模拟 Grade D)

    题目: 象棋,黑棋只有将,红棋有帅车马炮.问是否死将. 思路: 对方将四个方向走一步,看看会不会被吃. 代码: 很难看……WA了很多发,还越界等等. #include <cstdio> # ...

  6. 【linux高级程序设计】(第九章)进程间通信-管道 3

    有名管道 无名管道和有名管道: 1. 管道是特殊类型的文件,在满足先入先出的原则写可以读写,不能定位读写位置. 2.管道是单向的. 3.无名管道阻塞于读写位置,而有名管道阻塞在创建位置. 4.无名管道 ...

  7. SpringMVC + Hibernate + MySQL 的简易网页搭建(Control实现篇)

    在完成Dao层的实现之后,接下来我们需要继续开发我们网页的Control层以及View层. 从开发网页的角度来说: 1. Control层之下的Dao层和Service层可以看做是一个网页的底层负责与 ...

  8. ST表【p1311】 选择客栈

    题目描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0~k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...

  9. 【NOIP模拟赛】【数学真奇妙】【递推】旅行者问题

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  10. iptables 要点总结

    http://jiayu0x.com/2014/12/02/iptables-essential-summary/