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

提取一个ListViewAdapter

public abstract class ListViewAdapter<T> extends BaseAdapter {

    //为了让子类访问,于是将属性设置为protected
protected Context mContext;
protected List<T> mDatas;
protected LayoutInflater mInflater;
private int layoutId; //不同的ListView的item布局肯能不同,所以要把布局单独提取出来 public ListViewAdapter(Context context, List<T> datas, int layoutId) {
this.mContext = context;
mInflater = LayoutInflater.from(context);
this.mDatas = datas;
this.layoutId = layoutId;
} @Override
public int getCount() {
return mDatas.size();
} @Override
public T getItem(int position) {
return mDatas.get(position);
} @Override
public long getItemId(int position) {
return position;
} /**
* 添加数据,
*
* @param aList
*/
public void addData(List<T> aList) {
if (aList != null && aList.size() > 0) {
mDatas.addAll(aList);
}
notifyDataSetChanged();
} /**
* 获取数据
*
* @return
*/
public List<T> getData() {
return mDatas;
} /**
* 设置数据,
*
* @param sList
*/
public void setData(List<T> sList) {
mDatas.clear();
addData(sList);
} /**
* 清空数据
*/
public void clear() {
mDatas.clear();
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
//初始化ViewHolder,使用通用的ViewHolder,一样代码就搞定ViewHolder的初始化咯
ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position);//layoutId就是单个item的布局 convert(holder, getItem(position));
return holder.getConvertView(); //这一行的代码要注意了
} //将convert方法公布出去
public abstract void convert(ViewHolder holder, T t); }

可复用ViewHolder代码

public class ViewHolder {
private SparseArray<View> mViews;
private int mPosition;
private View mConvertView; public ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
this.mPosition = position;
this.mViews = new SparseArray<View>(); mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
mConvertView.setTag(this);
} public static ViewHolder get(Context context, View convertView, ViewGroup parent, int layoutId, int position) {
if (convertView == null) {
return new ViewHolder(context, parent, layoutId, position);
} else {
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.mPosition = position; //即时ViewHolder是复用的,但是position记得更新一下
return holder;
}
} /*
通过viewId获取控件
*/
//使用的是泛型T,返回的是View的子类
public <T extends View> T getView(int viewId) {
View view = mViews.get(viewId);
if (view == null) {
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
} public View getConvertView() {
return mConvertView;
}
}

再看看现在的adapter类

public class ExampleAdapter extends ListViewAdapter<String> {
public MsgTemplateAdapter(Context context, List<String> datas) {
super(context, datas, R.layout.template_list_item);
} @Override
public void convert(ViewHolder holder, String s) {
((TextView) holder.getView(R.id.name)).setText(s);
}
}

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

1.android studio使用maven

repositories {
maven {
url 'https://dl.bintray.com/ping/maven/'
}
} dependencies {
...
compile 'com.github.liuping123.commadapter:commadapter:0.0.3@aar'
} 2.android studio使用jcenter 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. Tree 树(树形期望dp)

    题意也是需要解释一下的,这个期望步数,是需要求无限步的时候的,就是你只要能到达,都要算上去, 这个我一开始真的没什么思路,打了暴力,搞一个精度,结果全超时了,看来精度定的太细了. 出题人的题解是这个, ...

  2. *Codeforces961G. Partitions

    $k \leq n \leq 100000$,求式子$Ans=\sum_{i=1}^n w_i\sum_{j=1}^n j\binom{n-1}{n-j} \{ ^{n-j}_{k-1} \}$. 题 ...

  3. springboot收集

    Spring Boot实战:拦截器与过滤器 参考:https://blog.csdn.net/m0_37106742/article/details/64438892 https://www.ibm. ...

  4. Android SurfaceView与View

    SurfaceView介绍 SurfaceView是视图(View)的继承类,这个视图里面内嵌了一个专门用于绘制的Surface.你可以控制这个Surface的格式和尺寸,而SurfaceView控制 ...

  5. iOS推送的开启与关闭

    开启: 
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationType ...

  6. Heavy Transportation(最短路)

    poj 1797 ——Heavy Transportation 思路: 这道题我们可以采用类似于求最短路径的方法,用一种新的“松弛操作”去取代原本的方法. 我们可以记录d[u]为运送货物到点j时最大可 ...

  7. python和linux的环境设置/PATH

    一.python的环境设置 1.输出path列表: pi@raspberrypi:~$ pythonPython 3.4.0 (default, Jul 1 2014, 09:37:01) [GCC ...

  8. STM32 GPIO寄存器 IDR ODR BSRR BRR

    IDR是查看引脚电平状态用的寄存器,ODR是引脚电平输出的寄存器 下面内容的原文:http://m646208823.blog.163.com/blog/static/1669029532012931 ...

  9. Bestcoder Tom and matrix

    问题描述 Tom放学回家的路上,看到天空中出现一个矩阵.Tom发现,如果矩阵的行.列从0开始标号,第i行第j列的数记为ai,j,那么ai,j=Cji 如果i < j,那么ai,j=0 Tom突发 ...

  10. CPU 内存 硬盘的区别

    第一点:CPU 是处理器,内存和硬盘是存储器,受CPU 的控制.  第二点:由于内存的速度很快,在电脑运行的过程中,CPU通常只与内存交换数据,但内存断电数据就会全部丢失,因此电脑使用硬盘作为主要的存 ...