一、引言
不管開發什么軟件,列表的使用是必不可少的,而本章我們將學習如何使用Xamarin去實現它,以及如何使用自定義適配器。關於xamarin中listview的基礎和適配器可以查看官網https://developer.xamarin.com/guides/android/user_interface/working_with_listviews_and_adapters/ 本章主要介紹如果在listview一項中顯示多條數據。
二、准備工作
1.創建一個Android項目取名為MyListview
2.新建2個視圖文件
3.下面編輯我們的試圖:
將下列代碼復制並替換到StuAdapter中

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:minWidth="25px" android:minHeight="25px"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="30.5dp" android:id="@+id/linearLayout1"> <TextView android:text="姓名:" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textView1" /> <TextView android:text="Text" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/name" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout2"> <TextView android:text="年齡:" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/textView3" /> <TextView android:text="Text" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/age" /> </LinearLayout> </LinearLayout>
將下列代碼復制並替換到StudentList中

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:minWidth="25px" android:minHeight="25px"> <ListView android:minWidth="25px" android:minHeight="25px" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/StList" /> </LinearLayout>
4.新建一個活動取名為StudentsList,新建2個類分別取名為Info和StuAdapter,下面就可以開始編碼了。
三、綁定數據
1.首先我們需要一個容器來存放我們需要的數據,於是我們在Info中添加如下代碼

public class Info:Java.Lang.Object { public string Name { get; set; }//定義學生姓名 public int Age { get; set; }//定義學生年齡 }
2.有了容器,我們現在就需要把我們的數據綁定綁定到適配器,於是我們自定義一個適配器,添加以下代碼

public class StuAdapter : BaseAdapter { List<Info> StuItems; Activity Con; private LayoutInflater mInflater; public StuAdapter(Activity context,List<Info> items) { this.StuItems = items;//獲取傳過來的數據 this.Con = context; this.mInflater = LayoutInflater.From(context); } public override int Count { get { return StuItems.Count; } } public override Java.Lang.Object GetItem(int position) { return StuItems[position]; } public override long GetItemId(int position) { return 0; } /// <summary> /// 最核心的方法 /// </summary> /// <param name="position"></param> /// <param name="convertView"></param> /// <param name="parent"></param> /// <returns></returns> public override View GetView(int position, View convertView, ViewGroup parent) { StuView stuview; if (convertView ==null) { stuview = new StuView(); //我們要適配的控件所在的視圖 convertView = mInflater.Inflate(Resource.Layout.StuAdapter, null); //綁定控件 stuview.name = convertView.FindViewById<TextView>(Resource.Id.name); stuview.age = convertView.FindViewById<TextView>(Resource.Id.age); //設置控件要顯示的文字 stuview.name.Text = StuItems[position].Name; stuview.age.Text = StuItems[position].Age.ToString(); convertView.Tag = stuview; } else { stuview = (StuView)convertView.Tag; } return convertView; } //定義一個容器來存放控件,注意要繼承javaobject public class StuView:Java.Lang.Object { public TextView name; public TextView age; } }
3.下面我們就可以綁定列表了,將下列代碼添加到StudentsList活動中

public class StudentsList : Activity { public List<Info> item;//定義一個列表 public ListView listview;//定義控件 public StuAdapter adapter;//定義數據源 protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.StudentsList);//設置要顯示的視圖 AddDate(); listview = FindViewById<ListView>(Resource.Id.StList);//找到控件 adapter = new StuAdapter(this, item);//綁定適配器 listview.Adapter = adapter;//設置listview的數據源為adapter } /// <summary> /// 添加數據 /// </summary> public void AddDate() { //添加三條數據 Info info = new Info { Name = "張三", Age = 19 }; Info info1 = new Info { Name = "李四", Age = 30 }; Info info2 = new Info { Name = "王二", Age = 20 }; item = new List<Info>(); item.Add(info); item.Add(info1); item.Add(info2); } }
4.最后在我們的mainactivity活動中重寫button的點擊事件用來跳轉到StudentsList就ok了。
Intent intent = new Intent(); intent.SetClass(this, typeof(StudentsList)); StartActivity(intent);
5.效果圖