Android,通用ListAdapter
优点
不需要每个列表都建立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的更多相关文章
- 60.Android通用流行框架大全
转载:https://segmentfault.com/a/1190000005073746 Android通用流行框架大全 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的 ...
- C#/IOS/Android通用加密解密方法
原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...
- 15类Android通用流行框架
15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...
- Android通用框架设计与完整电商APP开发系列文章
作者|傅猿猿 责编|Javen205 有福利 有福利 有福利 鸣谢 感谢@傅猿猿 邀请写此系列文章 Android通用框架设计与完整电商APP开发 课程介绍 [导学视频] [课程详细介绍] 以下是部分 ...
- 我的Android进阶之旅------>Android通用流行框架大全
Android通用流行框架大全 缓存 图片加载 图片处理 网络请求 网络解析 数据库 依赖注入 图表 后台处理 事件总线 响应式编程 Log框架 测试框架 调试框架 性能优化 本文转载于lavor的博 ...
- (转载)15 个 Android 通用流行框架大全
15 个 Android 通用流行框架大全 时间:2017-03-20 11:36来源:未知 作者:admin 点击: 2089 次 15 个 Android 通用流行框架大全 1. 缓存 Dis ...
- Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
大家好,我们这一节讲一下,Android获取Ip的一些方法,在我们开发中,有判断手机是否联网,或者想获得当前手机的Ip地址,当然WIFI连接的和 我们3G卡的Ip地址当然是不一样的. 首先我尝试了如下 ...
- Android通用简洁的下载器
下载逻辑在android开发中可谓很常见,那么封装一个通用简洁的下载器时很有必要的.如果不想给工程引入一个很重的jar包那么可以直接复用下面的代码即可. 主要对外接口 构造函数 : publi ...
- android 通用 Intent
通用 Intent 本文内容显示详细信息 闹钟 日历 相机 联系人/人员应用 电子邮件 文件存储 本地操作 地图 音乐或视频 新笔记 电话 搜索 设置 发送短信 网络浏览器 使用 Android 调试 ...
随机推荐
- MVVM模式和在WPF中的实现(二)数据绑定
MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- 渗透测试工具BurpSuite做网站的安全测试(基础版)
渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...
- 【WCF】错误协定声明
在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...
- jQuery学习之路(6)- 简单的表格应用
▓▓▓▓▓▓ 大致介绍 在CSS技术之前,网页的布局基本都是依靠表格制作,当有了CSS之后,表格就被很多设计师所抛弃,但是表格也有他的用武之地,比如数据列表,下面以表格中常见的几个应用来加深对jQue ...
- 算法与数据结构(十六) 快速排序(Swift 3.0版)
上篇博客我们主要聊了比较高效的归并排序算法,本篇博客我们就来介绍另一种高效的排序算法:快速排序.快速排序的思想与归并排序类似,都是采用分而治之的方式进行排序的.快速排序的思想主要是取出无序序列中第一个 ...
- 使用SecureCRT连接虚拟机(ubuntu)配置记录
这种配置方法,可以非常方便的操作虚拟机里的Linux系统,且让VMware在后台运行,因为有时候我直接在虚拟机里操作会稍微卡顿,或者切换速度不理想,使用该方法亲测本机效果确实ok,特此记录. Secu ...
- PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.
PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...
- ABP领域层
1.实体Entites 1.1 概念 实体是DDD(领域驱动设计)的核心概念之一. 实体是具有唯一标识的ID且存储在数据库总.实体通常被映射成数据库中的一个表. 在ABP中,实体继承自Entity类. ...
- Atitit.研发团队的管理原则---立长不立贤与按资排辈原则
Atitit.研发团队的管理原则---立长不立贤与按资排辈原则 1. 组织任命原则概述1 2. 历史的角度看,大部分组织使用的立长不立贤原则1 3. 论资排辈 立长不立贤原则1 3.1. 资格和辈分是 ...
- MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
[转自网络]https://my.oschina.net/cers/blog/292191 PK Belongs to primary key 作为主键 NN Not Null 非空 UQ Uniqu ...