Xamarin.Android 使用ListView绑定数据

使用ListView进行数据绑定

第一步:新建一个类,用于存储显示字段。

namespace ListViewDataBIndDemo
{
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string IdCard { get; set; }
        public string Sex { get; set; }
        public string Age { get; set; }
    }
}

第二步:在Mian.axml 中绘制界面

<?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">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_marginTop="10dp">
        <TextView
            android:text="姓名"
            android:textSize="23sp"
            android:layout_width="150dp"
            android:layout_height="match_parent" />
        <EditText
            android:id="@+id/personName"
            android:layout_width="280dp"
            android:layout_height="wrap_content"
            android:singleLine="true" />
    </LinearLayout>
    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp">
        <LinearLayout
            android:id="@+id/LinearLayoutdasb2"
            android:layout_width="wrap_content"
            android:orientation="vertical"
            android:layout_height="match_parent">
            <LinearLayout
                android:id="@+id/LinearLayoutdasb3"
                android:layout_width="wrap_content"
                android:orientation="horizontal"
                android:layout_height="27dp"
                android:background="#C0C0C0">
                <TextView
                    android:text="序号"
                    android:layout_width="50dp"
                    android:gravity="center"
                    android:textColor="#000000"
                    android:textSize="20sp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="姓名"
                    android:layout_width="100dp"
                    android:gravity="center"
                    android:textSize="20sp"
                    android:textColor="#000000"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="身份证号"
                    android:layout_width="250dp"
                    android:gravity="center"
                    android:textSize="20sp"
                    android:textColor="#000000"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="性别"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:textSize="20sp"
                    android:textColor="#000000"
                    android:layout_width="80dp" />
                <TextView
                    android:text="年龄"
                    android:layout_width="80dp"
                    android:gravity="center"
                    android:textColor="#000000"
                    android:textSize="20sp"
                    android:layout_height="wrap_content" />
            </LinearLayout>
            <LinearLayout
                android:id="@+id/LinearLayout54"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#FFFAF0">
                <ListView
                    android:id="@+id/listViewPerson"
                    android:minWidth="30dp"
                    android:minHeight="30dp"
                    android:layout_width="550dp"
                    android:layout_height="match_parent"
                    android:divider="#000000"
                    android:dividerHeight="1dp" />
            </LinearLayout>
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

第三步:创建一个 Person_Items.axml 用于存放数据

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dip">
  <TextView
      android:id="@+id/item_id"
      android:layout_width="40dp"
      android:layout_height="wrap_content"
      android:textColor="#000000"
      android:layout_marginLeft="20dp"
      android:gravity="left"
      android:textSize="20sp"  />
  <TextView
      android:id="@+id/item_name"
      android:layout_width="90dp"
      android:layout_height="wrap_content"
      android:textColor="#000000"
      android:layout_marginLeft="20dp"
      android:gravity="left"
      android:textSize="20sp" />
  <TextView
      android:id="@+id/item_idcard"
      android:layout_width="240dp"
      android:layout_height="wrap_content"
      android:textColor="#000000"
      android:gravity="left"
      android:layout_marginLeft="10dp"
      android:textSize="20sp"  />
  <TextView
      android:id="@+id/item_sex"
      android:layout_width="70dp"
      android:layout_height="wrap_content"
      android:textColor="#000000"
      android:gravity="left"
      android:layout_marginLeft="10dp"
      android:textSize="20sp"  />
  <TextView
      android:id="@+id/item_age"
      android:layout_width="70dp"
      android:layout_height="wrap_content"
      android:textColor="#000000"
      android:gravity="left"
      android:layout_marginLeft="10dp"
      android:textSize="20sp" /> 
</LinearLayout>

第四步:创建一个继承于BaseAdapter的类名为ListViewAdapter

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace ListViewDataBIndDemo
{
    public class ListViewAdapter:BaseAdapter<Person>
    {
        Activity context;
        public List<Person> mings;

        public ListViewAdapter(Activity context, List<Person> mings)
        {
            this.context = context;
            this.mings = mings;
        }

        public override int Count
        {
            get
            {
                return this.mings.Count;
            }
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override Person this[int position]
        {
            get
            {
                return this.mings[position];
            }
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var itme = this.mings[position];

            convertView = LayoutInflater.From(context).Inflate(Resource.Layout.Person_Items, parent, false);

            TextView item_id = convertView.FindViewById<TextView>(Resource.Id.item_id);
            TextView item_name = convertView.FindViewById<TextView>(Resource.Id.item_name);
            TextView item_idcard = convertView.FindViewById<TextView>(Resource.Id.item_idcard);
            TextView item_sex = convertView.FindViewById<TextView>(Resource.Id.item_sex);
            TextView item_age = convertView.FindViewById<TextView>(Resource.Id.item_age);

            item_id.Text = (position + 1).ToString();
            item_name.SetText(itme.Name, TextView.BufferType.Normal);
            item_idcard.SetText(itme.IdCard, TextView.BufferType.Normal);
            item_sex.SetText(itme.Sex, TextView.BufferType.Normal);
            item_age.SetText(itme.Age, TextView.BufferType.Normal); 

            return convertView;
        }
    }
}

第五步:在MainActivity进行对数据绑定

using Android.App;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using System;

namespace ListViewDataBIndDemo
{
    [Activity(Label = "ListViewDataBIndDemo", MainLauncher = true, Theme = "@android:style/Theme.Holo.Light")]
    public class MainActivity : Activity
    {
        private List<Person> main_data = new List<Person>();
        private Person person;

        ListView lv_Person;
        EditText personName;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState); 
            SetContentView(Resource.Layout.Main);

            lv_Person = FindViewById<ListView>(Resource.Id.listViewPerson);
            personName = FindViewById<EditText>(Resource.Id.personName);

            for (int i = 1; i <= 20; i++)
            {
                person = new Person();
                person.Id = i;
                person.Name = "张三" + i.ToString();
                person.IdCard = "20172619979999" + new Random().Next(1000, 10000).ToString();
                person.Sex = new Random().Next(1, 3).ToString() == "1" ? "" : "";
                person.Age = new Random().Next(15, 30).ToString();
                main_data.Add(person);
            }
            lv_Person.Adapter = new ListViewAdapter(this, main_data);


            lv_Person.ItemClick += (s, e) =>
            {
                Toast.MakeText(this, "姓名:"+main_data[e.Position].Name +"\n身份证号:"+main_data[e.Position].IdCard, ToastLength.Long).Show();
            };

            //搜索姓名
            personName.TextChanged += (s, e) =>
             {
                 List<Person> per = selectList(main_data, personName.Text);
                 lv_Person.Adapter = new ListViewAdapter(this, per);
             };
        }

        private List<Person> selectList(List<Person> list, string value)
        { 
            return list.FindAll(delegate (Person info)
            { 
                if ((!string.IsNullOrEmpty(info.Name) && info.Name.Contains( value)))
                {
                    return true;
                } 
                else
                {
                    return false;
                }
            });
        }
    }
}

效果图:

链接: https://pan.baidu.com/s/1MRQjgvAuY5M96cbBi895-g

密码: i4fh

posted @ 2018-06-06 14:36  没事儿写个bug  阅读(427)  评论(0编辑  收藏  举报