博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Adapter的泛型
阅读量:7248 次
发布时间:2019-06-29

本文共 3178 字,大约阅读时间需要 10 分钟。

宗旨:GetView方法放在具体的Activity/Fragment里面实现,其他的均可以复用

/// /// 通用适配器:新建GetViewEvent委托+OnGetView方法,在外部实现,在重写GetView方法中调用/// /// 
public class CommonAdapter
: BaseAdapter
{ //要绑定的数据 private readonly List
items; //页面上下文 private readonly Activity context; //ListViewItem的布局id private readonly int layoutId; ///
/// 委托 /// public delegate View GetViewEvent(int position, View convertView, ViewGroup parent, T item, ViewHolder viewHolder); ///
/// 加载item的View事件 /// public event GetViewEvent OnGetView; public CommonAdapter(Activity context, int layoutId, List
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; } }
/// /// 通用ViewHolder:保存控件,下拉刷新列表时只重新赋值,不再新建控件(节省内存)/// Tag属性保证不错位///  public class ViewHolder : Object { private readonly SparseArray
views; private int position; private readonly View ConvertView; public ViewHolder(Activity context, ViewGroup parent, int layoutID, int position) { this.position = position; views = new SparseArray
(); 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; } ///
/// 通过ViewID获取控件 /// ///
///
///
public T GetView
(int viewId) where T : View { var view = views.Get(viewId); if (view == null) { view = ConvertView.FindViewById
(viewId); views.Put(viewId, view); } return (T) view; } }

MainActivity

protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.Main); ListView listView = FindViewById
(Resource.Id.id_lv_main); List
StudentsList =new List
(); StudentsList.Add(new Student() { Name = "朱泓霖" }); CommonAdapter
comAdapter = new CommonAdapter
(this, Resource.Layout.Item, StudentsList); comAdapter.OnGetView += comAdapter_OnGetView; listView.Adapter = comAdapter; } private View comAdapter_OnGetView(int position, View convertView, ViewGroup parent, Student item, ViewHolder viewHolder) { //通过ViewHolder获取对象并赋值 viewHolder.GetView
(Resource.Id.id_tv_title).Text = item.Name; return viewHolder.GetConvertView(); }

 

转载于:https://www.cnblogs.com/Lulus/p/8179034.html

你可能感兴趣的文章
SSH-Struts第二弹:一个Form提交两个Action
查看>>
词法分析
查看>>
Linux命令(二)
查看>>
Web登录验证之 Shiro
查看>>
LeeCode-Sort Colors
查看>>
Snort2.9.2.3 Installation on CentOS 6.2
查看>>
我的友情链接
查看>>
给软件工程师的自学建议
查看>>
Linux下SVN的备份方式
查看>>
hadoop 3.0.0 alpha1 分布式搭建
查看>>
刘宇凡:从吃饭中的道理领悟SEO
查看>>
1.1办公软件概述
查看>>
python中http的一些编码转换
查看>>
5.继续看W3C的 bootstrap
查看>>
PHP中include和require
查看>>
第一次标题
查看>>
H3C ospf router id 重复真的不能建立邻居吗?
查看>>
【symfoware OPEN】数据库基本操作
查看>>
iphone:截屏
查看>>
Mac 下 VirtualBox ubuntu 共享空间
查看>>