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. Jquery easyui 教程

            Jquery easyui教程                 目  录 1基本拖放... 4 2构建购物车型拖放... 5 3创建课程表... 8 4菜单和按钮Menu and Bu ...

  2. C#窗体四边框阴影效果的实现

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. nn

    <li> <a href="#" class="dropdown-toggle"> <i class="icon-des ...

  4. zookeeper系列之二—zookeeper历史

    Zookeeper是什么? Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源版本.它是为分布式应用提供一致性服务的软件,提供的功能包括:配置服 ...

  5. 编译android源码官方教程(2)建立编译环境「linux & mac osx」

    https://source.android.com/source/initializing.html Establishing a Build Environment IN THIS DOCUMEN ...

  6. 使用mybatis完成通用dao和通用service

    使用mybatis完成通用dao和通用service 概述: 使用通用dao和通用service可以减少代码的开发.可以将常用的增删改查放到通用dao中.对不同的or框架,基本上都有自己的实现如Spr ...

  7. request请求对象实例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoRequest.as ...

  8. CodeForces 483B Friends and Presents

     Friends and Presents Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  9. 【转载】nedmalloc结构分析

    原文:nedmalloc结构分析 nedmalloc是一个跨平台的高性能多线程内存分配库,很多库都使用它,例如:OGRE.现在我们来看看nedmalloc的实现 (以WIN32部分为例)    位操作 ...

  10. MusigCV安装

    首先,将下载的安装文件zip包,http://www.mathworks.com/products/compiler/mcr/ MCR2013a 然后依次执行下面的命令: 进入目录:cd /tmp 解 ...