• 简化大量重复代码
  • 支持多布局
  • 自定义图片加载
  • 常用数据操作
  • view复用
  • RecyclerView item 点击和长按事件

  

gradle依赖

dependencies {compile 'com.classic.adapter:commonadapter:1.2'//项目中使用到RecyclerView,需要添加依赖compile 'com.android.support:recyclerview-v7:23.4.0'
}

开始使用

ListView/GridView 使用示例

List<News> newsList = ...;
//单布局文件
listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(new CommonAdapter<News>(context,//item布局文件R.layout.item_none_picture, newsList ) {@Override public void onUpdate(BaseAdapterHelper helper, News item, int position) {//BaseAdapterHelper详细用法,见下方helper.setText(R.id.xxx, item.getTitle())//可实现ImageLoad接口,进行图片自定义加载方式,demo里面使用的Glide.setImageLoad(new GlideImageLoad()).setImageUrl(R.id.xxx,item.getCoverUrl());}
});//多布局文件
private final class MultipleLayoutAdapter extends CommonAdapter<News>{public MultipleLayoutAdapter(Context context, int layoutResId, List<News> data) {super(context, layoutResId, data);}//多种布局重写此方法即可@Override public int getLayoutResId(News item, int position) {int layoutResId = -1;switch (item.getNewsType()){case News.TYPE_NONE_PICTURE: //布局样式一layoutResId = R.layout.item_none_picture;break;case News.TYPE_SINGLE_PICTURE: //布局样式二layoutResId = R.layout.item_single_picture;break;case News.TYPE_MULTIPLE_PICTURE: //布局样式三layoutResId = R.layout.item_multiple_picture;break;更多的布局样式 ...}return layoutResId;}@Override public void onUpdate(BaseAdapterHelper helper, News item, int position) {helper.setImageLoad(new GlideImageLoad());switch (item.getNewsType()){case News.TYPE_NONE_PICTURE: //布局样式一helper.setText(R.id.xxx, item.getTitle()).setImageUrl(R.id.xxx,item.getCoverUrl());break;case News.TYPE_SINGLE_PICTURE: //布局样式二helper.setText(R.id.xxx, item.getTitle()).setImageUrl(R.id.xxx,item.getCoverUrl());break;case News.TYPE_MULTIPLE_PICTURE: //布局样式三helper.setText(R.id.xxx, item.getTitle()).setImageUrl(R.id.xxx,item.getCoverUrl());break;更多的布局样式 ...}}
}

RecyclerView 使用示例

List<News> newsList = ...;
//单布局文件
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
recyclerView.setItemAnimator(new DefaultItemAnimator());
newsAdapter = new NewsAdapter(this, R.layout.item_none_picture, newsList);
recyclerView.setAdapter(newsAdapter);private class NewsAdapter extends CommonRecyclerAdapter<News>{public NewsAdapter(Context context, int layoutResId, List<News> data) {super(context, layoutResId, data);}@Override public void onUpdate(BaseAdapterHelper helper, News item, int position) {helper.setText(R.id.xxx, item.getTitle()).setImageLoad(new GlideImageLoad()).setImageUrl(R.id.xxx,item.getCoverUrl());}
}//多布局文件
private final class MultipleLayoutAdapter extends CommonRecyclerAdapter<News>{public MultipleLayoutAdapter(Context context, int layoutResId, List<News> data) {super(context, layoutResId, data);}//多种布局重写此方法即可@Override public int getLayoutResId(News item, int position) {int layoutResId = -1;switch (item.getNewsType()){case News.TYPE_NONE_PICTURE: //布局样式一layoutResId = R.layout.item_none_picture;break;case News.TYPE_SINGLE_PICTURE: //布局样式二layoutResId = R.layout.item_single_picture;break;case News.TYPE_MULTIPLE_PICTURE: //布局样式三layoutResId = R.layout.item_multiple_picture;break;更多的布局样式 ...}return layoutResId;}@Override public void onUpdate(BaseAdapterHelper helper, News item, int position) {helper.setImageLoad(new GlideImageLoad());switch (item.getNewsType()){case News.TYPE_NONE_PICTURE: //布局样式一helper.setText(R.id.xxx, item.getTitle()).setImageUrl(R.id.xxx,item.getCoverUrl());break;case News.TYPE_SINGLE_PICTURE: //布局样式二helper.setText(R.id.xxx, item.getTitle()).setImageUrl(R.id.xxx,item.getCoverUrl());break;case News.TYPE_MULTIPLE_PICTURE: //布局样式三helper.setText(R.id.xxx, item.getTitle()).setImageUrl(R.id.xxx,item.getCoverUrl());break;更多的布局样式 ...}}
}

RecyclerView item点击事件和长按事件

commonRecyclerAdapter.setOnItemClickListener(new CommonRecyclerAdapter.OnItemClickListener() {@Overridepublic void onItemClick(RecyclerView.ViewHolder viewHolder, View view, int position) {// TODO ...}
});
commonRecyclerAdapter.setOnItemLongClickListener(new CommonRecyclerAdapter.OnItemLongClickListener() {@Override public void onItemLongClick(RecyclerView.ViewHolder viewHolder, View view,int position) {// TODO ...}
});

CommonAdapter、CommonRecyclerAdapter区别

CommonAdapter适用于:ListView/GridView
CommonRecyclerAdapter适用于:RecyclerView
使用方式都一样

BaseAdapterHelper 使用示例

helper.setText(R.id.viewId, text).setTag(R.id.viewId, objectTag).setAlpha(R.id.viewId, 0.6f).setBackgroundColor(R.id.viewId, R.color.colorResId).setBackgroundRes(R.id.viewId, R.drawable.drawableResId).setChecked(R.id.viewId, true).setImageBitmap(R.id.viewId,bitmap).setImageDrawable(R.id.viewId,drawable).setImageResource(R.id.viewId, R.drawable.drawableResId).setImageUrl(R.id.viewId, url).setProgress(R.id.viewId,progress).setProgress(R.id.viewId,progress,max).setRating(R.id.viewId, rating).setRating(R.id.viewId, rating, max).setTextColor(R.id.viewId, R.color.colorResId).setTextColorRes(R.id.viewId, R.color.colorResId).setTextColorRes(R.id.viewId, R.color.colorResId, theme) //New in version 1.2//TextView添加超链接,更多属性参考:android.text.util.Linkify#addLinks(TextView text, int mask).addLinks(R.id.viewId, , Linkify.ALL) //New in version 1.2//单个TextView设置Typeface.setTypeface(R.id.viewId, typeface)//多个TextView设置Typeface.setTypeface(typeface, R.id.xxx1, R.id.xxx2,R.id.xxx3, ...).setVisible(R.id.viewId, View.VISIBLE)//ProgressBar设置Max.setMax(R.id.viewId, max)//ListView设置adapter.setAdapter(R.id.viewId, adapter)//下面为View常用点击事件设置.setOnTouchListener(R.id.viewId, View.OnTouchListener).setOnClickListener(R.id.viewId, View.OnClickListener).setOnLongClickListener(R.id.viewId, View.OnLongClickListener).setOnItemClickListener(R.id.viewId, AdapterView.OnItemClickListener).setOnItemLongClickListener(R.id.viewId, AdapterView.OnItemLongClickListener).setOnItemSelectedClickListener(R.id.viewId, AdapterView.OnItemSelectedListener);//获取item的convertView
View convertView = helper.getView();//如果上面的属性不够用,可以通过getView(viewId)拿到View,然后进行属性设置
View childView = helper.getView(R.id.viewId);

自定义图片加载

public class YourXXX implements ImageLoad {@Override public void load(Context context, ImageView imageView, String imageUrl) {//使用Glide加载图片Glide.with(context).load(imageUrl).into(imageView);or//使用Picasso加载图片Picasso.with(context).load(url).into(imageView);orfrescoAndroid-Universal-Image-Loader自定义...}
}

注意事项

//加载网络图片之前,请调用setImageLoad方法,设置网络图片加载的实现类
helper.setImageLoad(new GlideImageLoad());
helper.setImageUrl(R.id.xxx,url);

常用的数据操作

//CommonAdapter、CommonRecyclerAdapter都实现了IData接口,里面包含了一些常用的数据操作void add(T elem);void addAll(List<T> elem);void set(T oldElem, T newElem);void set(int index, T elem);void remove(T elem);void remove(int index);void replaceAll(List<T> elem);boolean contains(T elem);void clear();

commonAdapter相关推荐

  1. Java泛型应用之打造Android中ListView和GridView万能适配器【CommonAdapter】--超简洁写法

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52813227 [DylanAndroid的csdn博客] 在android中使 ...

  2. Android 自定义ScrollView ListView 体验各种纵向滑动的需求

    1.概述 群里的一个哥们有个需求是这样的:问题:主要功能就是:1.循环的一个滑动:2.每次滑动结束,保持每个Item的完整.然后我当时给他写了个Demo,所有代码都在Activity里面,后期看来其太 ...

  3. Android开发常用开源框架2

    JumpingBeans lottie-android Android-ProgressBarWidthNumber JJSearchViewAnim 一个炫酷的SearchView搜索动画库 Tex ...

  4. Data Binding Library数据绑定框架

    Data Binding Library是Google在2015年IO大会上发布的一个用于实现MVVM设计模式的支持库 环境配置 在Android Studio 2.0 原生支持Data Bindin ...

  5. 自定义组合控件:Banner、轮播图、广告栏控件

    1. 项目概述 这里,我们使用自定义组合控件实现一个自动轮播的广告条,也叫轮播图,完整版的效果图如下图所示.其实,这就是我们经常见到的滚动广告,默认情况下每隔N 秒会自动滚动,用手指左右滑动时也会切换 ...

  6. android listview万能适配器

    参考    Android 快速开发系列 打造万能的ListView GridView 适配器 Hongyang public class CommonViewHolder {private Cont ...

  7. Android进阶笔记09:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  8. Android:打造“万能”Adapter与ViewHolder

    ##写在前面 最近一直忙着各种结课大作业,重新看起Android还有种亲切感.前段时间写项目的时候,学习了一个万能Adapter与ViewHolder的写法.说是"万能"其实就是在 ...

  9. Android 超高仿微信图片选择器 图片该这么加载

    2019独角兽企业重金招聘Python工程师标准>>> 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943 ...

最新文章

  1. 在有@Override方法上面会报错如下
  2. python编程入门到实践目录-Python编程从入门到实践笔记——文件
  3. jsp中未登录用户也可以浏览页面的功能实现代码
  4. 日期格式php用点隔离,PHP学习之校验日期格式合法性?(使用strtotime()和date())...
  5. 【bzoj4195】[Noi2015]程序自动分析 离散化+并查集
  6. anaconda如何保存python文件_想在Jupyter Notebook(Anaconda)中保存并运行Python脚本
  7. 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
  8. 【神经网络与深度学习】卷积神经网络在自然语言处理的应用
  9. 用python庆祝生日_奶茶妹妹章泽天欢度27岁生日,甜蜜微笑庆生,美到登热搜第一...
  10. springboot pom.xml实战(com.mchange与c3p0配置)
  11. 二叉树非递归遍历算法
  12. 手用计算机怎么弄声音,计算器怎么调声音
  13. 如何批量调整图片大小?
  14. 企业邮箱的好处有哪些?企业邮箱使用场景
  15. dnmap分布式集群扫描
  16. ALSA驱动框架简介
  17. 计算机硬盘损坏 数据如何修复,如何修复计算机硬盘错误?如何从硬盘数据损坏中恢复数据?...
  18. Ubuntu 22.04 x86_64 OVF (sysin)
  19. 【腾讯Bugly干货分享】从0到1打造直播 App
  20. 6.824:FaRM笔记

热门文章

  1. 计算机技术转让增值税,技术转让收入要交增值税吗?附会计处理
  2. 机器人绳索英雄下载苹果手机_警察机器人绳索英雄
  3. 男声女声分类识别SVM
  4. 5G网络结构及Options
  5. ValueError: cannot set a row with mismatched columns Pandas报错,超级折磨人
  6. 怎么检查服务器虚拟内存,服务器怎么查看虚拟内存
  7. 腾讯将引导微信第三方服务商转移到腾讯云平台
  8. 牧牛区块链培训,区块链产业生态已经初步形成
  9. rust绿狙_《喷射战士2》武器评测与使用技巧指南——绿狙篇
  10. 第三方Android 模拟器流畅速度快,适合开发人员(2)