Xamarin.Android CommonAdapter+ViewHolder
来源:互联网 发布:网络本科学位 编辑:程序博客网 时间:2024/06/01 03:58
写Adapter写到快要吐了的同学看这里,我们来研究在Xamarin.Android里面通用Adapter如何打造
1 说明
鸿洋的一篇文章Android 快速开发系列 打造万能的ListViewGridView 适配器 写的非常深刻,OO思想展示的非常好,文章地址是:
http://blog.csdn.net/lmj623565791/article/details/38902805/
看完了如何在Android实现通用Adapter的基础上研究一下Xamarin.Adnroid如何打造
2 Xamarin.Android+CommonAdapter
整体思路和Android实现的一致
A 在CommonAdapter里面
/// <summary> /// 通用适配器 /// </summary> /// <typeparam name="T"></typeparam> public class CommonAdapter<T> : BaseAdapter<T> { private readonly List<T> items; private readonly Activity context; private readonly int layoutId; public delegate View GetViewEvent( int position, View convertView, ViewGroup parent, T item, ViewHolder viewHolder); /// <summary> /// 加载item的View事件 /// </summary> public event GetViewEvent OnGetView; public CommonAdapter(Activity context, int layoutId, List<T> items) { this.context = context; this.layoutId = layoutId; this.items = items; } public override T this[int position] { get { return items[position]; } } public override int Count { get { return items.Count; } } public override long GetItemId(int position) { return position; } public override View GetView(int position, View convertView, ViewGroup parent) { var item = items[position]; var view = convertView; var viewHolder = ViewHolder.Get(context, convertView, parent, layoutId, position); if (OnGetView != null) return OnGetView(position, convertView, parent, item, viewHolder); return view; } }
B ViewHolder
原文参考地址:http://blog.csdn.net/sqh001/article/details/45111733
在此基础上我基于自己的需求在Viewholder里面封装了自己的方法/// <summary> /// 通用ViewHolder /// </summary> public class ViewHolder : Object { private readonly SparseArray<View> views; private int position; private readonly View ConvertView; public ViewHolder(Activity context, ViewGroup parent, int layoutID, int position) { this.position = position; views = new SparseArray<View>(); ConvertView = context.LayoutInflater.Inflate(layoutID, null); ConvertView.Tag = this; } //单例模式获取对象实例 public static ViewHolder Get(Activity context, View convertView, ViewGroup parent, int layoutId, int position) { if (convertView == null) return new ViewHolder(context, parent, layoutId, position); var holder = (ViewHolder) convertView.Tag; holder.position = position; return holder; } public View GetConvertView() { return ConvertView; } /// <summary> /// 通过ViewID获取控件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="viewId"></param> /// <returns></returns> public T GetView<T>(int viewId) where T : View { var view = views.Get(viewId); if (view == null) { view = ConvertView.FindViewById<T>(viewId); views.Put(viewId, view); } return (T) view; } /// <summary> /// 普通ImageView设置图片 /// </summary> /// <param name="viewId"></param> /// <param name="bm"></param> /// <returns></returns> public ViewHolder SetImageBitmap(int viewId, Bitmap bm) { var view = GetView<ImageView>(viewId); if (view != null) view.SetImageBitmap(bm); return this; } /// 为任意View设置监听 /// </summary> /// <typeparam name="T">View下所有的控件类型</typeparam> /// <param name="viewId">控件ID</param> /// <param name="widget">控件 View</param> /// <param name="listener"></param> /// <returns></returns> public ViewHolder SetOnClickListener<T>(int viewId, T widget, View.IOnClickListener listener) where T : View { View view = GetView<T>(viewId); view.SetOnClickListener(listener); return this; } }
C 如何使用
在相应的Activity中为ListView挂接相应的事件即可
0 0
- Xamarin.Android CommonAdapter+ViewHolder
- 万能适配器CommonAdapter和ViewHolder
- Android通用适配器CommonAdapter
- CommonAdapter
- commonAdapter
- android viewholder
- android viewholder
- Android ViewHolder
- android viewholder
- android viewholder
- android viewholder
- Android万能适配器CommonAdapter的源码分析
- Android通用数据适配器源码CommonAdapter
- Android超级common的Adapter,也就是传说的CommonAdapter
- android ViewHolder 使用
- Android:ListView之ViewHolder
- android ViewHolder优化
- Android ViewHolder模式
- UVa 1025
- ASP.NET格式转换
- MySql笔记(四)-事务
- Java正则表达式
- 50行C代码实现简单日历
- Xamarin.Android CommonAdapter+ViewHolder
- UVA 10806 Dijkstra, Dijkstra.
- c++习题:工资统计
- 机器学习常见算法个人总结(转)
- 基于Eclipse Mars.2的OSGi环境搭建
- Android AsyncTask详解
- C++版学生信息管理系统
- UNIX网络编程:消息队列
- LeetCode LRU Cache