优点

不需要每个列表都建立Adapter。

使用效果

Item点击事件使用的是自写的事件机制

mListAdapter = new BaseListAdapter<PromotionsModel>(mView.getContext(), data, R.layout.promotion_list_item) {

    @Override
public HashMap<String, Integer> GetViewList() {
HashMap<String, Integer> tmp = new HashMap<String, Integer>();
tmp.put("mainImage", R.id.item_image);
tmp.put("title", R.id.item_title);
tmp.put("desc", R.id.item_desc);
tmp.put("price", R.id.item_price);
tmp.put("yprice", R.id.item_yprice);
return tmp;
} @Override
public void SetViewData(HashMap<String, View> viewList, PromotionsModel data) {
ImageView iv = (ImageView) viewList.get("mainImage");
ImageLoader.getInstance().displayImage(DataApis.FileDownloadUrl + data.extDataModel.breviaryImg, iv);
TextView tv = (TextView) viewList.get("title");
tv.setText(data.name);
tv.getPaint().setFakeBoldText(true);
tv = (TextView) viewList.get("desc");
tv.setText(data.extDataModel.shopName);
tv = (TextView) viewList.get("price");
tv.setText("¥" + Double.toString(data.money));
tv = (TextView) viewList.get("yprice");
tv.setText("¥" + Double.toString(data.extDataModel.originalPrice));
tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
}
};
mListAdapter.OnItemClickEvent.addHandler(new EventHandle<PromotionsModel>() {
@Override
public void Handle(Object sender, PromotionsModel e) {
Intent intent = new Intent();
intent.setClass(mView.getContext(), DetailActivity.class);
Bundle bundle = new Bundle();
bundle.putString("Type", "Promotions");
bundle.putLong("DataKey", HostedBox.putData(e));
intent.putExtras(bundle);
startActivity(intent);
}
});

实现

public abstract class BaseListAdapter<ModelType> extends BaseAdapter {
private Context mContext;
private LayoutInflater mInflater;
private int mTemplateLayoutId;
private List<ModelType> mItems; public EventTrans<ModelType> OnItemClickEvent; final public void clearItem() {
mItems.clear();
} public BaseListAdapter(Context context, List<ModelType> items, int templateLayoutId) {
mContext = context;
mInflater = LayoutInflater.from(mContext);
mTemplateLayoutId = templateLayoutId;
mItems = items;
if (mItems == null) mItems = new ArrayList<ModelType>();
OnItemClickEvent = new EventTrans<ModelType>();
} final public void addItem(ModelType item) {
mItems.add(item);
} final public void removeItem(ModelType item) {
mItems.remove(item);
} @Override
final public int getCount() {
return mItems.size();
} @Override
final public Object getItem(int i) {
return mItems.get(i);
} @Override
final public long getItemId(int i) {
return i;
} public abstract HashMap<String, Integer> GetViewList(); public abstract void SetViewData(HashMap<String, View> viewList, ModelType data); @Override
final public View getView(final int i, View view, ViewGroup viewGroup) {
final ViewHodler holder;
final ModelType model = mItems.get(i); if (view == null) {
view = mInflater.inflate(mTemplateLayoutId, null);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
OnItemClickEvent.trigger(view, model);
}
}); holder = new ViewHodler(); HashMap<String, Integer> roll = GetViewList();
for (String key : roll.keySet()) {
holder.viewHashMap.put(key, view.findViewById(roll.get(key)));
} view.setTag(holder);
} else {
holder = (ViewHodler) view.getTag();
} SetViewData(holder.viewHashMap, model);
return view;
} final private class ViewHodler {
HashMap<String, View> viewHashMap = new HashMap<String, View>();
}
}

Android,通用ListAdapter的更多相关文章

  1. 60.Android通用流行框架大全

    转载:https://segmentfault.com/a/1190000005073746 Android通用流行框架大全 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的 ...

  2. C#/IOS/Android通用加密解密方法

    原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...

  3. 15类Android通用流行框架

    15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...

  4. Android通用框架设计与完整电商APP开发系列文章

    作者|傅猿猿 责编|Javen205 有福利 有福利 有福利 鸣谢 感谢@傅猿猿 邀请写此系列文章 Android通用框架设计与完整电商APP开发 课程介绍 [导学视频] [课程详细介绍] 以下是部分 ...

  5. 我的Android进阶之旅------>Android通用流行框架大全

    Android通用流行框架大全 缓存 图片加载 图片处理 网络请求 网络解析 数据库 依赖注入 图表 后台处理 事件总线 响应式编程 Log框架 测试框架 调试框架 性能优化 本文转载于lavor的博 ...

  6. (转载)15 个 Android 通用流行框架大全

    15 个 Android 通用流行框架大全 时间:2017-03-20 11:36来源:未知 作者:admin 点击: 2089 次 15 个 Android 通用流行框架大全   1. 缓存 Dis ...

  7. Android 通用获取Ip的方法(判断手机是否联网的方法)!!!

    大家好,我们这一节讲一下,Android获取Ip的一些方法,在我们开发中,有判断手机是否联网,或者想获得当前手机的Ip地址,当然WIFI连接的和 我们3G卡的Ip地址当然是不一样的. 首先我尝试了如下 ...

  8. Android通用简洁的下载器

    下载逻辑在android开发中可谓很常见,那么封装一个通用简洁的下载器时很有必要的.如果不想给工程引入一个很重的jar包那么可以直接复用下面的代码即可. 主要对外接口 构造函数 :     publi ...

  9. android 通用 Intent

    通用 Intent 本文内容显示详细信息 闹钟 日历 相机 联系人/人员应用 电子邮件 文件存储 本地操作 地图 音乐或视频 新笔记 电话 搜索 设置 发送短信 网络浏览器 使用 Android 调试 ...

随机推荐

  1. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  2. 前端框架 EasyUI (2)页面布局 Layout

    在 Web 程序中,页面布局对应用程序的用户体验至关重要. 在一般的信息管理类的 Web 应用程序中,页面结构通常有一个主工作区,然后在工作区上下左右靠近边界的区域设置一些边栏,用于显示信息或放置一些 ...

  3. 微软发布正式版SQL Server 2016

    微软于今天在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了.在博客中,微软数据集团的企 ...

  4. Winserver下的Hyper-v “未在远程桌面会话中捕获到鼠标”

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts

    系列目录 ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...

  6. 【需求设计1】VIP积分系统无聊YY

    RT,想到什么就写什么呗,这是最简单的方式,顺便给自己做一个记录,反正自己记忆力也不太好.本文是仿陆金所的积分系统,自己YY的一套东西. 首先我想做一个VIP兑换投资卷的功能: 我们先来确定一些我知道 ...

  7. vs15 preview5 离线安装包

    1.介绍 vs15是微软打造的新一代IDE,全新的安装方式.官网介绍如下(https://blogs.msdn.microsoft.com/visualstudio/2016/10/05/announ ...

  8. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  9. 一个简单的网站web项目的详解

    有不对的术语,或者不好理解的部分,欢迎大家批评指正,谢谢大家! 近期做的网站web项目,实现登录功能,查询功能.首先把这个项目分为几个模块来处理,当前用户模块,历史用户模块,历史记录模块,数据库模块, ...

  10. 腾讯云 安装mono

    一.yum -y update 运行出现以下错误: http://centos.tencentyun.com/contrib/x86_64/repodata/filelists.xml.gz: [Er ...