优点

不需要每个列表都建立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. 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...

  2. session实现购物车

    为实现简单的购物功能(购物车添加.账户查看.购物车商品删除.实时的购物商品数量及价格的计算显示.购物车商品数量可手动输入等),用session实现了一简单的以php语言为基础.连接MySQL数据库的购 ...

  3. KMP算法求解

    // KMP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespac ...

  4. 微软新神器-Power BI横空出世,一个简单易用,还用得起的BI产品,你还在等什么???

    在当前互联网,由于大数据研究热潮,以及数据挖掘,机器学习等技术的改进,各种数据可视化图表层出不穷,如何让大数据生动呈现,也成了一个具有挑战性的可能,随之也出现了大量的商业化软件.今天就给大家介绍一款逆 ...

  5. Android 剪贴板详解

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Clipboard 如本文有助于你理解 Android 剪贴板,不妨给我一个 Star.对于码农而言, ...

  6. javascript 判断参数类型大全

    js 判断类型的在开发中是很常用的,因为js 是弱类型的语言,var 可以接受任何形式的类型,但是在真正的开发中,我们需要根据不同类型做不同的处理,所以这个是必须的精通. 首先需要知道 typeof这 ...

  7. Linux主机上使用交叉编译移植u-boot到树莓派

    0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...

  8. Java获取本机的IP与MAC地址

    有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...

  9. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  10. maven打包插件:appassembler

    1.打包成bat 打包命令:mvn clean package appassembler:assemble <plugin> <groupId>org.codehaus.moj ...