Android--ListView与数据绑定(Xamarin)
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)的更多相关文章
- xamarin android listview的用法
listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...
- Android listview与adapter用法
listview与adapter用法 博客分类: android 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...
- Android:ListView之ViewHolder
前言 在开发Android应用过程中经常要与列表展示打交道,比如Listview.在使用过程中如果不能正确的进行细节处理那么对性能还是有很大的损耗的. Listview展示内容是通过一个Adapter ...
- [置顶]
android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
- 【转】Android listview与adapter用法
一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常 ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- Android ListView onItemClick Not Work
Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
- Android listview addHeaderView 和 addFooterView 详解
addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...
随机推荐
- centOS 虚拟机设置固定IP:图形化设置
右键单击图形化标志,Edit Connection 设置一下就可以了.
- 设计模式--单例模式Singleton(创建型)
单例模式很显然是定义一个类,这个类在程序中只有唯一的实例对象.一般单例类的构造函数是私有的,只能通过调用静态函数GetInstance来获取实例. 一.单例模式有三种:懒汉式单例.饿汉式单例.登记式单 ...
- ffmpeg-20160908[09,10,13,15,19,21,22,24]-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...
- iOS 多线程
一 多线程基础 1.进程:进程就是系统中正在运行的应用程序.每个进程是相互独立的且都运行在各自受保护的运行空间内. 比如同时打开迅雷.Xcode,系统就会分别启动2个进程. 2.线程:进程在执行任务是 ...
- Nodejs学习笔记(十二)--- 定时任务(node-schedule)
目录 写在之前 Cron风格定时器 通配符解释 范围触发 递归规则定时器 对象文本语法定时器 取消定时器 写在之后 写在之前 在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发 ...
- python基础之文件操作
对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...
- 基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- CozyRSS开发记录6-继续补全订阅内容栏
CozyRSS开发记录6-继续补全订阅内容栏 1.订阅内容栏布局 按照之前的原型图,把订阅内容栏分成三块.Xaml如下: 2.照葫芦画瓢,完成头部和列表 头部依然使用ColorZone,右侧再放两个按 ...
- ajax下载文件
得到所有Post数据: var postData=Request.Form.ToString() 构建JS代码 // Ajax 文件下载jQuery.download = function(url, ...
- cmd中编译java
cmd定位到.java文件所在位置: 注意.java文件名应与类名相同. javac xxx.java:编译(生成.class文件): java xxx:运行(执行.class文件): 若类间相互调用 ...