缘由:
本人是一枚 小菜 初学Xamarin-Android? 正在学习ListView 控件 发现这个控件的自定义布局 用的那叫一个爽字了得。
但是每次用ListView的时候都要 继承一下BaseAdapter 这就不爽了。好气啊,我这个人非常的懒只好寻求改良之法。
写这篇博客在这里献丑甚是尴尬啊,还请园子里的诸位大咖多多指正。小弟不胜感激!【谢谢O(∩_∩)O哈!】
?
小弟学识浅薄仅仅做了以下的改良之处
下面是效果图 自己都感觉丑 丑哭了 (⊙o⊙)…

代码奉上
?ListItem的布局代码
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="horizontal" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:minWidth="25px" 7 android:minHeight="25px"> 8 <ImageView 9 android:layout_width="89.5dp" 10 android:layout_height="67.5dp" 11 android:id="@+id/imgHard" /> 12 <LinearLayout 13 android:orientation="vertical" 14 android:minWidth="25px" 15 android:minHeight="25px" 16 android:layout_width="200dp" 17 android:layout_height="67.5dp" 18 android:id="@+id/linearLayout1"> 19 <TextView 20 android:text="Large Text" 21 android:textAppearance="?android:attr/textAppearanceLarge" 22 android:layout_width="279.5dp" 23 android:layout_height="wrap_content" 24 android:id="@+id/txtName" /> 25 <TextView 26 android:text="Small Text" 27 android:textAppearance="?android:attr/textAppearanceSmall" 28 android:layout_width="match_parent" 29 android:layout_height="wrap_content" 30 android:id="@+id/txtDesc" 31 android:textSize="12dp" /> 32 </LinearLayout> 33 <Button 34 android:text="查看信息" 35 android:layout_width="wrap_content" 36 android:layout_height="67.5dp" 37 android:id="@+id/button1" /> 38 </LinearLayout>
?
?
主界面的代码
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 <ListView 7 android:minWidth="25px" 8 android:minHeight="25px" 9 android:layout_width="match_parent" 10 android:layout_height="match_parent" 11 android:id="@+id/itemsPerson" 12 android:divider="@android:color/white" 13 android:dividerHeight="3dp" 14 android:descendantFocusability="afterDescendants" /> 15 </LinearLayout>
?
AllRoundBaseAdapter代码
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using Android.App;
7 using Android.Content;
8 using Android.OS;
9 using Android.Runtime;
10 using Android.Views;
11 using Android.Widget;
12
13 namespace AdapterStudy_20170301
14 {
15 public class AllRoundAdapter<T> : BaseAdapter<T>
16 {
17 #region 全局变量
18 /// <summary>
19 /// 上下文
20 /// </summary>
21 public Activity MyContext { get; set; }
22
23 /// <summary>
24 /// 数据源
25 /// </summary>
26 public List<T> MyDataSource { get; set; }
27
28 /// <summary>
29 /// Item 布局资源
30 /// </summary>
31 public int LayoutSource { get; set; }
32
33 /// <summary>
34 /// 执行的委托
35 /// </summary>
36 Action<View, T> MyAction;
37 #endregion
38
39 /// <summary>
40 /// 建立 AllRoundBaseAdapter
41 /// </summary>
42 /// <param name="actity">上下文</param>
43 /// <param name="listDataSource">数据源</param>
44 /// <param name="layoutSource">布局ID</param>
45 /// <param name="action">为布局赋值用到的方法</param>
46 public AllRoundAdapter(Activity actity, List<T> listDataSource, int layoutSource, Action<View, T> action)
47 {
48 this.MyContext = actity;
49 this.MyDataSource = listDataSource;
50
51 this.LayoutSource = layoutSource;
52
53 this.MyAction = action;
54 }
55
56 public override T this[int position]
57 {
58 get
59 {
60 return MyDataSource[position];
61 }
62 }
63
64 public override int Count
65 {
66 get
67 {
68 return this.MyDataSource.Count;
69 }
70 }
71
72 public override long GetItemId(int position)
73 {
74 return position;
75 }
76
77 public override View GetView(int position, View convertView, ViewGroup parent)
78 {
79 T t = this.MyDataSource[position];
80
81 View v = convertView;
82 if (v == null)
83 {
84 v = this.MyContext.LayoutInflater.Inflate(this.LayoutSource, null);
85 }
86
87 if (this.MyAction != null)
88 {
89 this.MyAction.Invoke(v, t);
90 }
91
92 return v;
93 }
94 }
95 }
?
?
MainActivity的代码
1 using System;
2 using Android.App;
3 using Android.Content;
4 using Android.Runtime;
5 using Android.Views;
6 using Android.Widget;
7 using Android.OS;
8 using System.Collections.Generic;
9 using Javax.Crypto;
10
11 namespace AdapterStudy_20170301
12 {
13 [Activity(Label = "AdapterStudy_20170301", MainLauncher = true, Icon = "@drawable/icon")]
14 public class MainActivity : Activity
15 {
16
17 private ListView lvPerson;
18 private List<Person> listPerson = new List<Person>();
19
20 protected override void OnCreate(Bundle bundle)
21 {
22 base.OnCreate(bundle);
23
24 // Set our view from the "main" layout resource
25 SetContentView(Resource.Layout.Main);
26
27
28 lvPerson = FindViewById<ListView>(Resource.Id.itemsPerson);
29
30 //填充一些数据
31 this.listPerson.Add(new Person("张飞", Resource.Drawable.person, "张翼德"));
32 this.listPerson.Add(new Person("刘备", Resource.Drawable.person, "刘玄德"));
33 this.listPerson.Add(new Person("关羽", Resource.Drawable.person, "关云长"));
34 this.listPerson.Add(new Person("张飞", Resource.Drawable.person, "张翼德"));
35 this.listPerson.Add(new Person("刘备", Resource.Drawable.person, "刘玄德"));
36 this.listPerson.Add(new Person("关羽", Resource.Drawable.person, "关云长"));
37 this.listPerson.Add(new Person("张飞", Resource.Drawable.person, "张翼德"));
38 this.listPerson.Add(new Person("刘备", Resource.Drawable.person, "刘玄德"));
39 this.listPerson.Add(new Person("张飞", Resource.Drawable.person, "张翼德"));
40 this.listPerson.Add(new Person("刘备", Resource.Drawable.person, "刘玄德"));
41 this.listPerson.Add(new Person("关羽", Resource.Drawable.person, "关云长"));
42 this.listPerson.Add(new Person("关羽", Resource.Drawable.person, "关云长"));
43
44 //设置表头表尾
45 View header = this.LayoutInflater.Inflate(Resource.Layout.HeaderLayout, null);
46 View footer = this.LayoutInflater.Inflate(Resource.Layout.FooterLayout, null);
47
48 this.lvPerson.AddHeaderView(header);
49 this.lvPerson.AddFooterView(footer);
50
51 //使用泛型的Adapter 进行赋值
52 lvPerson.Adapter = new AllRoundAdapter<Person>(this, listPerson, Resource.Layout.ListViewItemLayout,
53 (x, y) =>
54 {
55 x.FindViewById<TextView>(Resource.Id.txtName).Text = y.Name;
56 x.FindViewById<TextView>(Resource.Id.txtDesc).Text = y.Desc;
57 x.FindViewById<ImageView>(Resource.Id.imgHard).SetBackgroundResource(y.Image);
58 });
59
60 }
61 }
62 }
?
?
学识浅薄,请多多指正,多多关照! 感觉自己好菜 掩面而逃。
?
除非特殊声明否则,本博客文章均属 鲁迅认识的那只猹 原创,未经许可禁止转载,否则将保留追究法律责任的权利。
如果本博客损害了您的相关权益,请及时联系我,我将妥善处理。
Xamarin-Android_BaseAdapter 简单的复用
原文:https://blog.51cto.com/u_15318180/3241898