Xamarin.Android 使用ListView绑定数据

简介: 使用ListView进行数据绑定第一步:新建一个类,用于存储显示字段。namespace ListViewDataBIndDemo{ public class Person { public int Id { get; set; } publi...

使用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

目录
相关文章
|
3月前
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
|
1月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
59 0
|
3月前
|
JSON Java Android开发
Android 开发者必备秘籍:轻松攻克 JSON 格式数据解析难题,让你的应用更出色!
【8月更文挑战第18天】在Android开发中,解析JSON数据至关重要。JSON以其简洁和易读成为首选的数据交换格式。开发者可通过多种途径解析JSON,如使用内置的`JSONObject`和`JSONArray`类直接操作数据,或借助Google提供的Gson库将JSON自动映射为Java对象。无论哪种方法,正确解析JSON都是实现高效应用的关键,能帮助开发者处理网络请求返回的数据,并将其展示给用户,从而提升应用的功能性和用户体验。
87 1
|
3月前
|
缓存 API Android开发
Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
50 6
|
3月前
|
编解码 网络协议 前端开发
如何实现Android平台GB28181设备接入模块按需打开摄像头并回传数据
后台采集摄像头,如果想再进一步扩展,可以把android平台gb28181的camera2 demo,都移植过来,实现功能更强大的国标设备侧,这里主要是展示,收到国标平台侧的回传请求后,才打开摄像头,才开始编码打包,最大限度的减少资源的占用
|
3月前
|
编解码 网络协议 Android开发
Android平台GB28181设备接入模块实现后台service按需回传摄像头数据到国标平台侧
我们在做Android平台GB28181设备对接模块的时候,遇到这样的技术需求,开发者希望能以后台服务的形式运行程序,国标平台侧没有视频回传请求的时候,仅保持信令链接,有发起视频回传请求或语音广播时,打开摄像头,并实时回传音视频数据或接收处理国标平台侧发过来的语音广播数据。
|
3月前
|
算法 数据处理 开发工具
Android平台RTSP|RTMP播放器如何回调YUV或RGB数据
在开发Android平台上的RTSP或RTMP播放器时,开发者不仅追求低延迟播放,还希望获取解码后的视频数据(如YUV或RGB格式),以便进行视觉算法分析。使用大牛直播SDK中的SmartPlayer,可在确保播放流畅的同时,通过设置外部渲染器(`SmartPlayerSetExternalRender`)来高效地回调原始视频数据。例如,对于RGBA数据,需实现`NTExternalRender`接口,并重写相关方法以处理数据和尺寸变化。同样地,对于I420(YUV)数据,也需要相应地实现接口以满足需求。这种方式使得开发者能在不影响常规播放功能的情况下,进行定制化的视频处理任务。
|
3月前
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
45 0
|
5月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
64 2
|
5月前
|
Android开发 Kotlin
Android面试题 之 Kotlin DataBinding 图片加载和绑定RecyclerView
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`&lt;data&gt;`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
95 1