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. 翻译:打造Edge渲染内核的浏览器

    最近开始了解UWP和Edge内核,在微软技术博客中找到一篇文章,主要是介绍Edge渲染内核使用技术.顺手翻译了一下.不对之处请斧正! Over the past several months, we ...

  2. HDU 5102 The K-th Distance(模拟)

    题意:输入一棵树,输出前k小的点对最短距离dis(i,j)的和. 模拟,官方题解说得很清楚了.不重复了. http://bestcoder.hdu.edu.cn/ 需要注意的是,复杂度要O(n+k), ...

  3. HDU 3879 Base Station(最大权闭合子图)

    经典例题,好像说可以转化成maxflow(n,n+m),暂时只可以勉强理解maxflow(n+m,n+m)的做法. 题意:输入n个点,m条边的无向图.点权为负,边权为正,点权为代价,边权为获益,输出最 ...

  4. 删除安装的 cocoapods 的缓存方法

    清除 Cocoapods 本地缓存 特殊情况下,由于网络或者别的原因,通过 cocoapods 下载的文件可能会有问题.这时候可以删除 Cocoapods 的缓存(~/Library/Caches/C ...

  5. 【转】Caffe初试(五)视觉层及参数

    本文只讲解视觉层(Vision Layers)的参数,视觉层包括Convolution, Pooling, Local Response Normalization (LRN), im2col等层. ...

  6. 【转】B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子 ...

  7. 与你相遇好幸运,Mongodb客户端&BUGS

    > Robomongo https://robomongo.org > 日常使用频率最高的客户端 存在BUG: 在 db.getCollection('xzq').find({" ...

  8. Angular.element和$document的使用方法分析,代替jquery

    AngularJs是不直接操作DOM的,但是在平时的开发当中,我们有的时候还是需要操作一些DOM的,如果使用原生的JS的话操作过于麻烦,所以大家一般都是使用jQuery,jQuery虽然好用,但是An ...

  9. [BI项目记]-对项目文件进行规划

    BI项目中会有很多不同种类的项目,此篇会对这些项目进行一个总结,并且在TFS中进行分类. 根据笔者对BI项目的经验和理解,主要将BI项目中的项目类型进行如下分类: DB脚本 DB脚本是BI项目中重要的 ...

  10. 08 Servlet

    Servlet技术          * Servlet开发动态的Web资源的技术.                       * Servlet技术               * 在javax. ...