一个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 ... 
随机推荐
- FileReader&FileWriter
			FileReader public static void main(String[] args) { //创建文件对象指定要读取的文件路径 File file=new File("d:\\ ... 
- ppt提取图片,视频文件
			1,将视频另存为htm格式,然后会生成文件夹,里面就有. 2,如果没法生成htm格式,可以生成odp格式,压缩文件,用解压缩软件查看odp文件,就能看到. 3,pptx直接修改后缀为rar或者zip, ... 
- 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)-   杨老师的游戏
			链接:https://www.nowcoder.com/acm/contest/116/B来源:牛客网 题目描述 杨老师给同学们玩个游戏,要求使用乘法和减法来表示一个数,他给大家9张卡片,然后报出一个 ... 
- 最小生成树【p2121】 拆地毯
			题目描述--->p2121 拆地毯 分析 这题为什么是最大生成树. 先来bb两句 题目为拆地毯,让我们剩下k个地毯. 题目想要我们求得最大的美丽度. 且要求我们 保留的地毯构成的图中,任意可互相 ... 
- APIO2018练习赛伪题解
			传送门:https://pcms.university.innopolis.ru/statements/org/apio/2018/practice/statements.pdf 主要就在于后面三道构 ... 
- hdu 1015 Safecracker 水题一枚
			题目链接:HDU - 1015 === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein s ... 
- PHP缩略图类
			class ThumbImages{ /** * 生成缩略图 * prorate 按比例缩放 * distortion 扭曲型缩图 * cut 最小裁剪后的缩图 * backFill 背景填充图 * ... 
- 第一讲work(axe)
			1,Dao package com.songyan.Dao; public interface Axe { public void chop(); } package com.songyan.Dao; ... 
- 【Mybatis】mybatis查询报错org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'areaName' in 'class java.lang.String'
			mybatis查询报错: Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for pro ... 
- 手动删除SVCH0ST.EXE的方法
			最近几天在办公室的计算机上又发现了一种病毒,在进程管理器中多出了两个进程:SVCH0ST.EXE.IEXPLORE.EXE,经一番查看揭开了它们的真面目,现将清除这种病毒的方法总结如下: 病毒 ... 
