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 调试 ...
随机推荐
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印
系列目录 前言 1.本次主要弥补工作流,用户表单数据的打印 2.使用JQprint做为web打印插件 3.兼容:FireFox,Chrome,IE. 4.没有依赖也没有配置,使用简单 代码下载:htt ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- BlockingCollection使用
BlockingCollection是一个线程安全的生产者-消费者集合. 代码 public class BlockingTest { BlockingCollection<int> bc ...
- C# 泛型
C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...
- Hadoop伪分布式集群环境搭建
本教程讲述在单机环境下搭建Hadoop伪分布式集群环境,帮助初学者方便学习Hadoop相关知识. 首先安装Hadoop之前需要准备安装环境. 安装Centos6.5(64位).(操作系统再次不做过多描 ...
- Linux模块编程框架
Linux是单内核系统,可通用计算平台的外围设备是频繁变化的,不可能将所有的(包括将来即将出现的)设备的驱动程序都一次性编译进内核,为了解决这个问题,Linux提出了可加载内核模块(Loadable ...
- zookeeper(单机/集群)安装与配置
一.安装与单机配置 1.下载: wget http://archive.apache.org/dist/zookeeper/stable/zookeeper-3.4.6.tar.gz 如果网站下载不了 ...
- java 泛型
1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...
- BZOJ 1006 【HNOI2008】 神奇的国度
题目链接:神奇的国度 一篇论文题--神奇的弦图,神奇的MCS-- 感觉我没有什么需要多说的,这里简单介绍一下MCS: 我们给每个点记录一个权值,从后往前依次确定完美消除序列中的点,每次选择权值最大的一 ...