public abstract class SimpleBaseAdapter<T> extends BaseAdapter {

    protected Context context;
protected List<T> data; public SimpleBaseAdapter(Context context, List<T> data) {
this.context = context;
this.data = data == null ? new ArrayList<T>() : data;
} @Override
public int getCount() {
return data.size();
} @Override
public Object getItem(int position) {
if (position >= data.size())
return null;
return data.get(position);
} @Override
public long getItemId(int position) {
return position;
} /**
* 该方法需要子类实现,需要返回item布局的resource id
*
* @return
*/
public abstract int getItemResource(); /**
* 使用该getItemView方法替换原来的getView方法,需要子类实现
*
* @param position
* @param convertView
* @param parent
* @param holder
* @return
*/
public abstract View getItemView(int position, View convertView, ViewHolder holder); @SuppressWarnings("unchecked")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (null == convertView) {
convertView = View.inflate(context, getItemResource(), null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return getItemView(position, convertView, holder);
} public class ViewHolder {
private SparseArray<View> views = new SparseArray<View>();
private View convertView; public ViewHolder(View convertView) {
this.convertView = convertView;
} @SuppressWarnings("unchecked")
public <T extends View> T getView(int resId) {
View v = views.get(resId);
if (null == v) {
v = convertView.findViewById(resId);
views.put(resId, v);
}
return (T) v;
}
} public void addAll(List<T> elem) {
data.addAll(elem);
notifyDataSetChanged();
} public void remove(T elem) {
data.remove(elem);
notifyDataSetChanged();
} public void remove(int index) {
data.remove(index);
notifyDataSetChanged();
} public void replaceAll(List<T> elem) {
data.clear();
data.addAll(elem);
notifyDataSetChanged();
}
}
public class TestFoodListAdapter extends SimpleBaseAdapter<String> {

    public TestFoodListAdapter(Context context, List<String> data) {
super(context, data);
} @Override
public int getItemResource() {
return R.layout.listitem_test;
} @Override
public View getItemView(int position, View convertView, ViewHolder holder) {
TextView text = holder.getView(R.id.text);
text.setText(getItem(position));
return convertView;
}
}

[借鉴] Android简便通用的SimpleBaseAdapter的更多相关文章

  1. 2.Android 自定义通用的Item布局

    转载:http://www.jianshu.com/p/e7ba4884dcdd BaseItemLayout 简介 在工作中经常会遇到下面的一些布局,如图标红处: 05.png 07.png 08. ...

  2. Android应用安全之Android APP通用型拒绝服务漏洞

    0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞.该通用型本地拒绝服务可以造成大面积的app拒绝服务. 针对序列化对象而出现的拒绝服务主要是由于应 ...

  3. React Native微信分享 朋友圈分享 Android/iOS 通用

    超详细React Native实现微信好友/朋友圈分享功能-Android/iOS双平台通用   2016/06/16 |  React Native技术文章 |  Sky丶清|  暂无评论 |  1 ...

  4. Android 自定义通用的loadingview

    介绍 好久没有写博客啦,最近在接近新年了,年前的工作都要收尾,所以特别忙,周末抽空写了个通用的加载view,写篇博客分享出来. 功能 1.显示加载视图,加载失败的时候显示加载失败视图,数据为空时显示数 ...

  5. wemall app微信商城系统Android之通用通知接口demo

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Native(原生)支付模式一demo,供技术 ...

  6. Android APP通用型拒绝服务、漏洞分析报告

    点评:记得曾经有段时间很多SRC平台被刷了大量APP本地拒绝服务漏洞(目前腾讯金刚审计系统已经可检测此类漏洞),移动安全团队发现了一个安卓客户端的通用型拒绝服务漏洞,来看看他们的详细分析吧. 0xr0 ...

  7. Android 意图通用类 IntentUrl

    1.整体分析 1.1.源代码如下,可以直接Copy. public class IntentUtil { /** * 打开链接 * 根据设置判断是用那种方式打开 * * @param context ...

  8. Android 获取签名证书的具体信息(Eclipse和Android studio通用)

    今天要用到签名证书的MD5,可是这个仅仅有在第一次生成的时候我看到了,这可怎么办呢,幸亏我们有google,我们执行以下的命令就OK了. keytool -list -v -keystore 签名证书 ...

  9. Android绘图通用第三方控件

      https://github.com/ddanny/achartengine     CodePull requests 2SecurityInsights Charting library fo ...

随机推荐

  1. 解决浏览器使用<pre></pre>时不换行

    <!-- 解决火狐浏览器中pre标签不换行 --> <style type="text/css"> pre { white-space: pre-wrap; ...

  2. 华东交通大学2016年ACM“双基”程序设计竞赛 1005

    Problem Description 最近侯ry感觉自己在数学方面的造诣不忍直视:他发现他的学习速率呈一个指数函数递增,疯狂的陷入学习的泥潭,无法自拔:他的队友发现了他的学习速率y=e^(b*lna ...

  3. ios项目中引用其他项目复习

    ios项目中引用其他开源项目,今天再次复习了,记个备注. 1. 将开源项目的.xcodeproj拖入项目frameworks 2. Build Phases下 Links Binary With Li ...

  4. 微软的决心,开发者的信心!惊喜的 Connect(); // 2016

    微软的决心,开发者的信心!惊喜的 Connect(); // 2016   Visual Studio for Mac 2014 年 11 月 13 日,微软宣布 .NET 开源与跨平台.两年后的今天 ...

  5. iOS 关于使用xib创建cell的两种初始化方式

    [转]http://my.oschina.net/CgShare/blog/337406 方法一: 第一步: [self.collectionView registerNib:[UINib nibWi ...

  6. 瞧,这就是UE4 C++

    1.虚幻中的类前缀你会见到U,A,F,以下就是很好的罗列其中的意义 U: UObject继承过来的,例如UTexture A: AActor继承过来的,例如AGameMode F: 其他的类和结构,例 ...

  7. L0/L1/L2范数的联系与区别

    L0/L1/L2范数的联系与区别 标签(空格分隔): 机器学习 最近快被各大公司的笔试题淹没了,其中有一道题是从贝叶斯先验,优化等各个方面比较L0.L1.L2范数的联系与区别. L0范数 L0范数表示 ...

  8. LINUX DIFF命令详解

    刚才在和公司做离线IP对比,最后手工了,感觉还是比较麻烦的,遇到数据很大的时候不能手工进行了 本想用linux下的DIFF来进行对比,发现结果很乱.时间很紧最后还是手工了. 现在忙完要认认真真学习一下 ...

  9. QT 加载c语言编译的动态库

    QLibrary lib("./libprint.so");//库的路径if(lib.load()){    typedef void(*AddFunction)(char *st ...

  10. 本地设置正常,放服务器上就报 System.Security系统找不到指定的文件解决方法

    在应用程序池设置中将“加载用户配置文件”(Load User Profile)设置为true,问题就解决.