Xamarin.Android 入門之:Listview和adapter


一、引言

不管開發什么軟件,列表的使用是必不可少的,而本章我們將學習如何使用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>
View Code

 

將下列代碼復制並替換到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>
View Code

 

4.新建一個活動取名為StudentsList,新建2個類分別取名為Info和StuAdapter,下面就可以開始編碼了。

三、綁定數據

1.首先我們需要一個容器來存放我們需要的數據,於是我們在Info中添加如下代碼

   public class Info:Java.Lang.Object
    {
        public string Name { get; set; }//定義學生姓名
        public int Age { get; set; }//定義學生年齡
    }
View Code

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;
        }

    }
View Code

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);
        }
    }
View Code

4.最后在我們的mainactivity活動中重寫button的點擊事件用來跳轉到StudentsList就ok了。

 Intent intent = new Intent();
 intent.SetClass(this, typeof(StudentsList));
 StartActivity(intent);

 5.效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM