Android,通用ListAdapter
2024-10-11 10:16:59
优点
不需要每个列表都建立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>();
}
}
最新文章
- Easyui columns列图片移位问题!!!
- output和returnvalue的作用
- 9.openssl ca
- JavaScript 常用算法
- php根据IP地址跳转对应的城市,淘宝REST api调用地址直接使用
- 8、C#基础整理(数组和冒泡排序)
- 访问Github过慢解决
- BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划( dp)
- richedit设置滚动条的位置和更新内容
- protobuf中的枚举缺省值应该为UNKNOWN
- DNS域名解析过程,域名的认识
- PS中如何提高修改psd图片的效率(自动选择工具)
- 关于scrapy
- logstash 切分tomcat日志
- 构建器Constructor的返回值/构建器
- Angular6 项目开发常用时间组件服务
- Nginx 部署多个 web 项目(虚拟主机)
- Win7开机卡在Windows Update 35%的解决办法
- (七)dubbo服务集群实现负载均衡
- linq to sql语句中转换数据类型和日期操作
热门文章
- In-Memory:在内存中创建临时表和表变量
- 在SQL2008查找某数据库中的列是否存在某个值
- Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件
- [C#] C# 知识回顾 - 特性 Attribute
- 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS
- css text-fill-color与text-stroke讲解
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
- python之最强王者(9)——函数
- Linux基础介绍【第八篇】
- python性能检测工具整理