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的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...
随机推荐
- NSString 和NSData 转换
NSString 转换成NSData 对象 NSData* xmlData =[@"testdata" dataUsingEncoding:NSUTF8StringEncoding ...
- seajs hello world
http://localhost/seajs/index.html <!doctype html> <head> <title>Hello Seajs</ti ...
- (分享) git详解
今天学了下git http://blog.jobbole.com/78960/ 他写的超级好的 之前也弄过,在eclipse上有个关于github的一个插件,可以通过github的仓库地址把ec ...
- October 16th Week 43rd Sunday 2016
Life is not a problem to be solved, but a reality to be experienced. 人生不是待解决的难题,而是等着我们去体验的现实. Life i ...
- 一键删除.svn文件bat脚本
用过SVN或CVS版本控制工具的朋友,在享受着它们给我们带来的方便的同时,也许也在为这么一件事情苦恼: 如果某个目录在SVN或CVS版本控制工具的控制之下时.该目录下以及该子孙目录下都会有一个.svn ...
- elk平台搭建
很多时候我们需要对日志做一个集中式的处理,但是通常情况下这些日志都分布到n台机器上面,导致一个结果就是效率比较低,而ELK平台可以帮助我们解决这么一件事情: ELK下载:https://www.ela ...
- 学习微信小程序之css2
一:伪类的使用 .class-btn:active{ color: red;} <button class="class-btn">并集选择器</button&g ...
- SQL性能学习汇总 00
.在一条语句中不要重复使用相同的函数 .尽可能在存储过程中使用临时变量和临时表 如 IF (Object_ID('tempdb..#T') IS NOT NULL) DROP TABLE #T SEL ...
- 后台拼接input 后,动态获取input的值
//前台 <input id=" /> //后台 string text = request.form["text"].toString();
- Python for Infomatics 第12章 网络编程二(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.3 用HTTP协议获取一张 ...