在开发过程中,会写很多的adapter类,其中很多公共的部分,不需要每次都去书写,可以为开发者省下很多时间

提取一个ListViewAdapter

  1. public abstract class ListViewAdapter<T> extends BaseAdapter {
  2.  
  3. //为了让子类访问,于是将属性设置为protected
  4. protected Context mContext;
  5. protected List<T> mDatas;
  6. protected LayoutInflater mInflater;
  7. private int layoutId; //不同的ListView的item布局肯能不同,所以要把布局单独提取出来
  8.  
  9. public ListViewAdapter(Context context, List<T> datas, int layoutId) {
  10. this.mContext = context;
  11. mInflater = LayoutInflater.from(context);
  12. this.mDatas = datas;
  13. this.layoutId = layoutId;
  14. }
  15.  
  16. @Override
  17. public int getCount() {
  18. return mDatas.size();
  19. }
  20.  
  21. @Override
  22. public T getItem(int position) {
  23. return mDatas.get(position);
  24. }
  25.  
  26. @Override
  27. public long getItemId(int position) {
  28. return position;
  29. }
  30.  
  31. /**
  32. * 添加数据,
  33. *
  34. * @param aList
  35. */
  36. public void addData(List<T> aList) {
  37. if (aList != null && aList.size() > 0) {
  38. mDatas.addAll(aList);
  39. }
  40. notifyDataSetChanged();
  41. }
  42.  
  43. /**
  44. * 获取数据
  45. *
  46. * @return
  47. */
  48. public List<T> getData() {
  49. return mDatas;
  50. }
  51.  
  52. /**
  53. * 设置数据,
  54. *
  55. * @param sList
  56. */
  57. public void setData(List<T> sList) {
  58. mDatas.clear();
  59. addData(sList);
  60. }
  61.  
  62. /**
  63. * 清空数据
  64. */
  65. public void clear() {
  66. mDatas.clear();
  67. }
  68.  
  69. @Override
  70. public View getView(int position, View convertView, ViewGroup parent) {
  71. //初始化ViewHolder,使用通用的ViewHolder,一样代码就搞定ViewHolder的初始化咯
  72. ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position);//layoutId就是单个item的布局
  73.  
  74. convert(holder, getItem(position));
  75. return holder.getConvertView(); //这一行的代码要注意了
  76. }
  77.  
  78. //将convert方法公布出去
  79. public abstract void convert(ViewHolder holder, T t);
  80.  
  81. }

可复用ViewHolder代码

  1. public class ViewHolder {
  2. private SparseArray<View> mViews;
  3. private int mPosition;
  4. private View mConvertView;
  5.  
  6. public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
  7. this.mPosition = position;
  8. this.mViews = new SparseArray<View>();
  9.  
  10. mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
  11. mConvertView.setTag(this);
  12. }
  13.  
  14. public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
  15. if (convertView == null) {
  16. return new ViewHolder(context, parent, layoutId, position);
  17. } else {
  18. ViewHolder holder = (ViewHolder) convertView.getTag();
  19. holder.mPosition = position; //即时ViewHolder是复用的,但是position记得更新一下
  20. return holder;
  21. }
  22. }
  23.  
  24. /*
  25. 通过viewId获取控件
  26. */
  27. //使用的是泛型T,返回的是View的子类
  28. public <T extends View> T getView(int viewId) {
  29. View view = mViews.get(viewId);
  30. if (view == null) {
  31. view = mConvertView.findViewById(viewId);
  32. mViews.put(viewId, view);
  33. }
  34. return (T) view;
  35. }
  36.  
  37. public View getConvertView() {
  38. return mConvertView;
  39. }
  40. }

再看看现在的adapter类

  1. public class ExampleAdapter extends ListViewAdapter<String> {
  2. public MsgTemplateAdapter(Context context, List<String> datas) {
  3. super(context, datas, R.layout.template_list_item);
  4. }
  5.  
  6. @Override
  7. public void convert(ViewHolder holder, String s) {
  8. ((TextView) holder.getView(R.id.name)).setText(s);
  9. }
  10. }

看到这么简洁的代码,是不是感觉整个人都精神了

  1. 1.android studio使用maven
  2.  
  3. repositories {
  4. maven {
  5. url 'https://dl.bintray.com/ping/maven/'
  6. }
  7. }
  8.  
  9. dependencies {
  10. ...
  11. compile 'com.github.liuping123.commadapter:commadapter:0.0.3@aar'
  12. }
  13.  
  14. 2.android studio使用jcenter
  15.  
  16. compile 'com.github.liuping123.commadapter:commadapter:0.0.3'

Github地址:https://github.com/liuping123/CommAdapter

参考:http://www.cnblogs.com/smyhvae/p/4477079.html

 

【声明】

欢迎转载,但请保留文章原始出处

博客地址:http://www.cnblogs.com/lping/

文章来源:http://www.cnblogs.com/lping/p/5470781.html

 

android adapter公共写法的更多相关文章

  1. Android Adapter推荐写法

    package jason.fragmentdemo.adapter; import nqy.fragmentdemo.R; import nqy.fragmentdemo.model.Article ...

  2. Android进阶(十四)Android Adapter详解

    Android Adapter详解 Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View.因为layout五花八门,很多数据都不能直接绑定上去, ...

  3. cocos2d-x 3.0 引用第三方库 及编译成apk时android mk文件写法

    cocos2d-x 3.0 中.假设你须要使用CocosStudio.Extensions扩展库 等等.都须要自己手动加入. 加入过程例如以下:(比方说如今我要加入libExtensions,libC ...

  4. [转]Android Adapter以及getView()方法的理解

    Android Adapter基本理解: 我的理解是: 1.一个有许多getter的类(就是getView(),getCount()....这些方法) 2.有多少个get方法?都是什么? 这些gett ...

  5. Android Adapter基本理解

    感谢大佬:https://blog.csdn.net/l799069596/article/details/47301711 Android Adapter基本理解: 我的理解是: 1.一个有许多ge ...

  6. Android 提醒公共方法 Notification

    SimpAndroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化 常用的控件,方便新手学习和使用.也欢迎老鸟来一起充实项目:项目地址 今天的目标是做一个公共的提醒方法 ...

  7. Android——Adapter

    Adapter——本身只是一个接口.Adapter是将数据绑定到UI界面上的桥接类.Adapter负责创建显示每个项目的子View和提供对下层数据的访问. 数据适配器作用:把复杂的数据(数组.链表.数 ...

  8. Android adapter适配器的学习

    学习Android有一点时间,说说自己的学习感悟. 首先呢,先说说适配器的作用,顾名思义,它就是把数据定义好一定的规则,使得我们可以用到ListView GridView等上面 所以说这玩意,还是得好 ...

  9. 转载《Android Adapter简单总结》

    1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid View)等地方都需要用到Adapter.如下 ...

随机推荐

  1. Python升级版本2.6到2.7

    CentOS 6 系统默认 Python 版本是:2.6.6 平时在使用中遇到很多的库要求是 2.7.x 版本的库,比如使用 ConfigParser 库,在 2.6 版本库就不支持没有 value ...

  2. Oracle spool 用法小结

    关于SPOOL(SPOOL是SQLPLUS的命令,不是SQL语法里面的东西.) 对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如: select taskindex|| ...

  3. BZOJ2425 [HAOI2010]计数 【数位dp】

    题目 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现 ...

  4. 黑匣子_NOI导刊2010提高 (对顶堆)

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  5. Linux(8):linux三剑客sed和awk & Shell 编程(1)

    linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...

  6. Java面试题集(三)

    Jdk与jre的区别? Java运行是环境(jre)是将要执行java程序的java虚拟机. Java开发工具包(jdk)是完整的java软件开发包,包含jre,编译器和其他工具如javaDoc,ja ...

  7. 转 DOS 8.3 文件名命名规则

    http://www.360doc.com/content/10/0813/14/73007_45757514.shtml DOS 8.3 文件名命名规则 经常看到命令行或者其它软件在显示目录的时候出 ...

  8. HDU 4771 BFS + 状压

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  9. mongo安装-docker

    拉取官方镜像(可以自己使用dockerFile构建): docker search mongo //查询Docker Hub 上的mongo镜像 docker pull mongo // 拉取官方镜像 ...

  10. python(3)- 常用快捷键及基础命令