commonAdapter
- 简化大量重复代码
- 支持多布局
- 自定义图片加载
- 常用数据操作
- 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相关推荐
- Java泛型应用之打造Android中ListView和GridView万能适配器【CommonAdapter】--超简洁写法
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52813227 [DylanAndroid的csdn博客] 在android中使 ...
- Android 自定义ScrollView ListView 体验各种纵向滑动的需求
1.概述 群里的一个哥们有个需求是这样的:问题:主要功能就是:1.循环的一个滑动:2.每次滑动结束,保持每个Item的完整.然后我当时给他写了个Demo,所有代码都在Activity里面,后期看来其太 ...
- Android开发常用开源框架2
JumpingBeans lottie-android Android-ProgressBarWidthNumber JJSearchViewAnim 一个炫酷的SearchView搜索动画库 Tex ...
- Data Binding Library数据绑定框架
Data Binding Library是Google在2015年IO大会上发布的一个用于实现MVVM设计模式的支持库 环境配置 在Android Studio 2.0 原生支持Data Bindin ...
- 自定义组合控件:Banner、轮播图、广告栏控件
1. 项目概述 这里,我们使用自定义组合控件实现一个自动轮播的广告条,也叫轮播图,完整版的效果图如下图所示.其实,这就是我们经常见到的滚动广告,默认情况下每隔N 秒会自动滚动,用手指左右滑动时也会切换 ...
- android listview万能适配器
参考 Android 快速开发系列 打造万能的ListView GridView 适配器 Hongyang public class CommonViewHolder {private Cont ...
- Android进阶笔记09:Android 万能适配器
1. Android 万能适配器 项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...
- Android:打造“万能”Adapter与ViewHolder
##写在前面 最近一直忙着各种结课大作业,重新看起Android还有种亲切感.前段时间写项目的时候,学习了一个万能Adapter与ViewHolder的写法.说是"万能"其实就是在 ...
- Android 超高仿微信图片选择器 图片该这么加载
2019独角兽企业重金招聘Python工程师标准>>> 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943 ...
最新文章
- 在有@Override方法上面会报错如下
- python编程入门到实践目录-Python编程从入门到实践笔记——文件
- jsp中未登录用户也可以浏览页面的功能实现代码
- 日期格式php用点隔离,PHP学习之校验日期格式合法性?(使用strtotime()和date())...
- 【bzoj4195】[Noi2015]程序自动分析 离散化+并查集
- anaconda如何保存python文件_想在Jupyter Notebook(Anaconda)中保存并运行Python脚本
- 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
- 【神经网络与深度学习】卷积神经网络在自然语言处理的应用
- 用python庆祝生日_奶茶妹妹章泽天欢度27岁生日,甜蜜微笑庆生,美到登热搜第一...
- springboot pom.xml实战(com.mchange与c3p0配置)
- 二叉树非递归遍历算法
- 手用计算机怎么弄声音,计算器怎么调声音
- 如何批量调整图片大小?
- 企业邮箱的好处有哪些?企业邮箱使用场景
- dnmap分布式集群扫描
- ALSA驱动框架简介
- 计算机硬盘损坏 数据如何修复,如何修复计算机硬盘错误?如何从硬盘数据损坏中恢复数据?...
- Ubuntu 22.04 x86_64 OVF (sysin)
- 【腾讯Bugly干货分享】从0到1打造直播 App
- 6.824:FaRM笔记
热门文章
- 计算机技术转让增值税,技术转让收入要交增值税吗?附会计处理
- 机器人绳索英雄下载苹果手机_警察机器人绳索英雄
- 男声女声分类识别SVM
- 5G网络结构及Options
- ValueError: cannot set a row with mismatched columns Pandas报错,超级折磨人
- 怎么检查服务器虚拟内存,服务器怎么查看虚拟内存
- 腾讯将引导微信第三方服务商转移到腾讯云平台
- 牧牛区块链培训,区块链产业生态已经初步形成
- rust绿狙_《喷射战士2》武器评测与使用技巧指南——绿狙篇
- 第三方Android 模拟器流畅速度快,适合开发人员(2)