回到目录
我原创,我贡献,我是仓储大叔
本篇大叔原创,本着对技术的热爱去研究它,把成果分享给国人!大叔始终相信一句话:你只有选择一个感兴趣的工作,你才能更好的发挥你的潜力,而这一切都建立在你不断研究,不断钻研的前提下。
Xamarin文章在网上比较少,而ListView相关的信息更好,有限的那么几个还都说的不清楚,只是告诉大家如何去完成按钮的事件,而在事件里,如何获取当前行的其它元素信息则没有说明,在网络上找了很久,没有收获,确定还是自己去研究吧,幸运的是,最终还是找了解决的方法。
图像简单说下
先看一下截图,一个ListView,它的布局是表格,每行由若干个TextView组成,最后是两个Button,我们在单击每行按钮时,需要拿到对应行上的其它元素的值
访原生android失败了
我们在网上可以找到的是Android原生环境对按钮的实现方法,即它可以直接在new View.OnClickListener这个接口,并直接override Click这个方法,我有时确实觉得java的语法怪怪的,不成体统,感觉编译器应该是为OnClickListener这个接口动态建立了一个匿名类,然后由它重写Click方法,毕竟,我们认为接口是不能被实例化的,呵呵;而在xamarin里,如何去重写,也建立一个类去继承View.OnClickListener,说做就做,不过可惜的是在xamarin里并没有一个OnClickListener的接口,因为.net的命名规范的原因,把这个接口改名为OnClickListener,我直接继承它,实现了Click方法,不过可能的是,ListView的click事件并没有被相应,所以,我的研究还在继续...
public class lvButtonListener : Android.Views.View.IOnClickListener { public void OnClick(View v) { v.FindViewById(Resource.Id.hello).Text = "click"; Toast.MakeText(v.Context, "View OnClick2", ToastLength.Short).Show(); } public IntPtr Handle { get { return this.Handle; } } public void Dispose() { this.Dispose(); } }
继续找资料,按Adapter实现View.IOnClickListener,成功了
新建的类去实现IOnClickListener不成功,所以就在适配器上直接去实现它,这个代码也是从网上找的,不过,所只是说了一下按钮的处罚,简单几行代码,没有说明如何获取当前行里的元素
////// 适配器 /// public class Task_InfoListAdapter : BaseAdapter , Android.Views.View.IOnClickListener { //代码 }
实现Click方法,写你自己的逻辑,其中参数View,表示当前按钮所在的View对象,它不包括其它行里的元素,如TextView你在这个View对象上是无法找到的
////// 单击某个按钮时的事件 /// /// 这个按妞 public void OnClick(View v) { switch (v.Id) { case Resource.Id.rechargeBtn: Toast.MakeText(this.context, "充值" + v.Id, ToastLength.Short).Show(); this.context.StartActivity(typeof(RechargeActivity)); break; case Resource.Id.delBtn: Toast.MakeText(this.context, "删除",ToastLength.Short).Show(); break; } }
多尝试,最终找到解决方法
上面的代码只是告诉我们你点击的是哪个按钮,而无法得到当前按钮所在行的其它元素,这时我们使用V.FindViewById
下面是适配器的完整代码
////// 适配器 /// public class Task_InfoListAdapter : BaseAdapter , Android.Views.View.IOnClickListener { /// /// 所有UserInof 的数据 /// List items; Activity context; public Task_InfoListAdapter(Activity context, IEnumerable items) : base() { this.context = context; this.items = items.ToList(); } public override long GetItemId(int position) { return position; } public override Task_Info this[int position] { get { return items[position]; } } public override int Count { get { return items.Count; } } /// /// 系统会呼叫 并且render. /// /// /// /// /// public override View GetView(int position, View convertView, ViewGroup parent) { var item = items[position]; if (convertView == null) { //使用自订的UserListItemLayout,这是一个模版,可以在外布遍历它 convertView = context.LayoutInflater.Inflate(Resource.Layout.PartialCurrentTaskList, null); } convertView.FindViewById (Resource.Id.TaskID).Text = item.TaskID.ToString(); convertView.FindViewById (Resource.Id.ExpectedDate).Text = item.CreateDate.ToString(); convertView.FindViewById (Resource.Id.Status).Text = item.Status.ToString(); //得到listview上的按钮 var btn = convertView.FindViewById
如果您觉得本文章对您有帮助,请帮顶一下!
研究在继续...
回到目录