ListView 控件是一个条目容器, 用于显示集合对象(如数组, List<T>, ObservableCollection<T>等)的每一个条目, 并提供滚动功能.

列表视图是UI, 集合对象是数据, 两者肯定不能直接相关联, 必须借助一个转换器来实现绑定, 安卓系统中的这个转换器被称为 Adapter (适配器).

安卓提供了一些预定义的适配器以供使用, 如ArrayAdapter(数组适配器), 这些类都继承于 BaseAdapter ,能满足一般需求, 不过大部分情况下需要定义自己的适配器以实现更多功能. 具体实现一般分为以下几步:

1. 定义保存数据的实体对象.  例: 定义一个实体类 TestEntity

    public class TestEntity
{
public int ID { get; set; }
public string Name { get; set; }
}

2. 设计数据模板, 此模板会被应用于每一个条目项.  例: 在 Resources/layout/ 文件夹下新建一个布局文件, 命名为 TestEntityDataTemplate.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">
<TextView
android:text="Text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/TestEntityID" />
<TextView
android:text="Text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"
android:id="@+id/TestEntityName" />
</LinearLayout>

3. 定制适配器类.

例: 定义一个类 TestAdapter 继承于 BaseAdapter<T> 泛型类, 并实现四个抽象方法, ① 索引器(在非泛型类BaseAdapter中为GetItem方法). ② Count属性. ③ GetItemId方法. ④ GetView方法. 其中, GetView方法返回一个视图对象, 此方法会在ListView要显示一个条目项时被调用, 此方法所返回的视图对象就是这个条目项的视图

自定义的适配器类一般需要三个对象, 上下文对象, 资源id值, 条目对象

    class TestAdapter : BaseAdapter<TestEntity>
{
private Context context;
private int resourceId;
private List<TestEntity> items = null; public TestAdapter(Context context, int resourceId, List<TestEntity> list)
{
this.context = context;
this.resourceId = resourceId;
this.items = list;
} public override TestEntity this[int position]
{
get
{
return this.items[position];
}
} public override int Count
{
get
{
return this.items.Count;
}
} public override long GetItemId(int position)
{
return position;
} public override View GetView(int position, View convertView, ViewGroup parent)
{
TestEntity item = items[position]; //如果没有获得视图才创建新视图, 提升运行效率
if (convertView == null)
{
//实例化布局
convertView = LayoutInflater.From(this.context).Inflate(this.resourceId, null);
}
convertView.FindViewById<TextView>(Resource.Id.TestEntityID).Text = item.ID.ToString();
convertView.FindViewById<TextView>(Resource.Id.TestEntityName).Text = item.Name; return convertView;
}
}

4. 至此, 已经定义好了数据类, 数据模板和适配器类, 接下来只需创建相应的对象, 并将 ListView 绑定到适配器就行了.

例: 创建数据集合与适配器对象, 声明为类的字段,以方便在其它方法中使用

        private List<TestEntity> testEntityCollection = new List<TestEntity>();
private TestAdapter testAdapter = null;

设置 ListView 的 Adapter 属性即可完成绑定

            ListView listView1 = FindViewById<ListView>(Resource.Id.listView1);
testAdapter = new TestAdapter(this, Resource.Layout.TestEntityDataTemplate, testEntityCollection);
listView1.Adapter = testAdapter;

当数据集合发生变化时, 记得调用适配器的 NotifyDataSetChanged() 方法通知 UI 进行更新

        private void BtnAdd_Click(object sender, EventArgs e)
{
int id = testEntityCollection.Count + ;
testEntityCollection.Add(new TestEntity()
{
ID = id,
Name = "test-" + id.ToString()
});
//
testAdapter.NotifyDataSetChanged();
}

Android--ListView与数据绑定(Xamarin)的更多相关文章

  1. xamarin android listview的用法

    listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...

  2. Android listview与adapter用法

    listview与adapter用法 博客分类: android   一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  3. Android:ListView之ViewHolder

    前言 在开发Android应用过程中经常要与列表展示打交道,比如Listview.在使用过程中如果不能正确的进行细节处理那么对性能还是有很大的损耗的. Listview展示内容是通过一个Adapter ...

  4. [置顶] android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  5. 【转】Android listview与adapter用法

    一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常 ...

  6. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  7. Android ListView onItemClick Not Work

    Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...

  8. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...

  9. Android ListView 常用技巧

    Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...

  10. Android listview addHeaderView 和 addFooterView 详解

    addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...

随机推荐

  1. 【krpano】浏览点赞插件(源码+介绍+预览)

    简介 最近几天研究了如何在krpano全景的基础上实现记录浏览量和点赞次数,写了一个插件,方便大家使用. 效果截图如下: 每当有用户打开该全景页面时,浏览量会自动加1: 用户可以主动点击点赞按钮,点击 ...

  2. WINFORM中的COMBOX模糊查询

    有的时候下拉框中的元素过多不好查询,可以考虑进行模糊过滤查询. 在类文件的designer.cs中找到定义combox的模块,加入以下两行代码即可: this.combox.AutoCompleteM ...

  3. JMeter遇到的问题一:Error writing to server(转)

    Java.io.IOException: Error writing to server异常:我测试500个并发时,系统没有问题:可当我把线程数加到800时,就出现错误了,在"查看结果树&q ...

  4. Huffman的应用_Huffman编码

    //最优二叉树 #include <iostream> #include <iomanip> using namespace std; //定义结点类型 //[weight | ...

  5. Jquery表单提交后获取返回Json值

    1.给form添加id值: <form action="/News/SaveMessage" method="post" accept-charset=& ...

  6. windows自带FTP开启后,浏览器打不开的问题

    问题描述:最近需要安装一个FTP服务器,傻瓜式的下一步下一步之后,用IE登录却发现登录不上,总是显示连接中,查找了一下网上别人的回答,发现原来系统的FTP是由主动跟被动的区别的. 问题解决:在IE下, ...

  7. Linux网络管理2---(网络环境查看命令、网络测试命令)

    1.网络环境查看命令 ifconfig命令 查看或临时修改网络状态的命令 可以看到IP.子网掩码……信息 关闭和启动网卡 ifdown 网卡设备名(比如: ifdown eth0):禁用该网卡设备 i ...

  8. C# 执行文件的根目录 (转)

    1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...

  9. Reversing Bits in C

    英文原文: http://corner.squareup.com/2013/07/reversing-bits-on-arm.html 本文讲解翻转bit位的一些方法,例如如何将1001 1101变为 ...

  10. C#最简单例子

    using System; namespace ConsoleApplication1 { class People { int age; string name; public string get ...