commonAdapter
来源:互联网 发布:cdrx8软件下载 免费 编辑:程序博客网 时间:2024/06/04 23:36
- 简化大量重复代码
- 支持多布局
- 自定义图片加载
- 常用数据操作
- 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() { @Override public 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/GridViewCommonRecyclerAdapter适用于: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的convertViewView 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); or fresco Android-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();
0 0
- CommonAdapter
- commonAdapter
- 打造CommonAdapter
- 万能适配器 CommonAdapter
- ListView的CommonAdapter
- Xamarin.Android CommonAdapter+ViewHolder
- ListView万能适配器CommonAdapter
- Android通用适配器CommonAdapter
- 万能适配器CommonAdapter和ViewHolder
- 支持多布局的CommonAdapter
- 万能适配器(2) 抽取CommonAdapter
- listView的简化适配器commonAdapter
- ListView、Spinner、RecycleView的CommonAdapter
- Android万能适配器CommonAdapter的源码分析
- CommonAdapter-万能的ListView.GridView的适配器
- 打造 Recyclerview 的万能 Adapter CommonAdapter
- Android通用数据适配器源码CommonAdapter
- Android超级common的Adapter,也就是传说的CommonAdapter
- java axis调用cxf 的坑object is not an instance of declaring class while invoking public
- CodeForces 643E
- 【JAVA秒会技术之Dubbo入门】Dubbo在电商开发中的应用
- Android 按键防止过快点击(防抖),在ButterKnife中的简单解决方案。
- java Pattern和Matcher详解
- commonAdapter
- 常用 Git 命令清单
- C++调用lua
- 在Ubuntu 14.04上设置生产环境可用的Node.js
- Listen第二个参数的意义
- 适配器模式--缺省适配器,类适配器,对象适配器
- scikit learn标准化数据
- Xcode8和swift3更新笔记(一)
- 如何在Ubuntu 14.04上利用Logstash与Kibana实现日志信息集中化