xamarin android——数据绑定到控件(四)
本文为通过自定义列表适配器定义ListView,以上文为基础,基于ListActivity。
定义列表项布局,包含一个图片显示,标题和描述
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dip">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
为了使视图显示数据,必须自定义适配器。ListView每一个列表项显示的是自定义的Model数据,选择继承BaseAdapter<T>,T为自定义Model
model类内容
public class Model
{
public string Name {
get;
set;
} public string Description {
get;
set;
} public int Image {
get;
set;
}
}
适配器类需要实现两个方法和两个属性:
Count属性、T类型的this 属性、GetItemId方法、GetView方法。
this属性返回指定索引对应的对象数据。
自定义ModelListAdapter代码:
class ModelListAdapter :BaseAdapter<Model>
{
public List<Model> Models {
get;
set;
} public ModelListAdapter(List<Model> models)
{
Models = models;
} #region implemented abstract members of BaseAdapter public override long GetItemId (int position)
{
return position;
} public override View GetView (int position, View convertView, ViewGroup parent)
{
//从数据源中获取当前位置对应的对象
var item = Models [position];
//避免重复创建和销毁列表项视图
if (convertView==null) {
LayoutInflater inflater = Application.Context.GetSystemService ("layout_inflater") as LayoutInflater;
convertView = inflater.Inflate (Resource.Layout.CustomItem,null);
} var image = convertView.FindViewById<ImageView> (Resource.Id.image);
var title = convertView.FindViewById<TextView> (Resource.Id.title);
var description = convertView.FindViewById<TextView> (Resource.Id.description); image.SetImageResource (item.Image);
title.Text = item.Name;
description.Text = item.Description; return convertView;
} public override int Count {
get {
return Models.Count;
}
} #endregion #region implemented abstract members of BaseAdapter public override Model this [int index] {
get {
return Models [index];
}
} #endregion }
最后一步,将LiatActivity的ListAdapter赋值为我们自定义的适配器
var models = new List<Model>{
new Model(){ Name="Name",Description="Description",Image = Resource.Drawable.Icon},
new Model(){ Name="Name",Description="Description",Image = Resource.Drawable.Icon},
new Model(){ Name="Name",Description="Description",Image = Resource.Drawable.Icon},
new Model(){ Name="Name",Description="Description",Image = Resource.Drawable.Icon},
new Model(){ Name="Name",Description="Description",Image = Resource.Drawable.Icon},
new Model(){ Name="Name",Description="Description",Image = Resource.Drawable.Icon}
}; this.ListAdapter = new ModelListAdapter (models);
自定义适配器,我们可以进行更灵活的处理。在GetView方法中执行更多的操作,如果只是进行简单的自定义列表样式,可以通过SimpleAdapter快速完成操作。
IList<IDictionary<string,object>> items = new JavaList<IDictionary<string,object>> ();
var item1 = new JavaDictionary<string,object> ();
item1.Add ("name","show name");
item1.Add("description","description");
item1.Add ("image",Resource.Drawable.Icon); var item2 = new JavaDictionary<string,object> ();
item2.Add ("name","show name");
item2.Add("description","description");
item2.Add ("image",Resource.Drawable.Icon); items.Add (item1);
items.Add (item2); this.ListAdapter = new SimpleAdapter (this,items,Resource.Layout.CustomItem,
new string[]{"name","description","image"},new int[]{Resource.Id.title,Resource.Id.description,Resource.Id.image});
items为定义的数据源k,定义SimpleAdapter传入参数即可。其中string[] 中定义的值必须等于Dictionary中key的值,string[] 和int[] 两个参数表示from string[] to int[]。即每个string[]中的值作为key,取得Dictionary中的值,赋值给int[] 中id所对应的视图。
xamarin android——数据绑定到控件(四)的更多相关文章
- xamarin android——数据绑定到控件(二)
本示例为通过媒体内容提供器获取本机中的图片显示在Gallery中. 活动中简单的初始化代码 private void InitGallery() { Gallery gallery = FindVie ...
- xamarin android——数据绑定到控件(三)
如果当前活动中,只存在一个listview视图,可以借助ListActivity快速的实现一个列表,即当前Activity继承ListActivity.在OnCreate方法中简单的两行代码,就可以创 ...
- xamarin android——数据绑定到控件(一)
mono for android 中光标由ICursor 接口标识,该接口公开了操作结果数据集的所有方法.光标的使用非常消耗系统资源,所以不使用时应该光比光标.可以通过StartManagingCur ...
- 安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等
本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...
- Xamarin.android 重写axml控件
https://www.cnblogs.com/lonelyxmas/p/5632694.html <Laco: 用来用引指定的控件 android:layout_widt ...
- Xamarin.Android DatePickerFragment 日期控件
MainActivity 代码: public class MainActivity : Activity { TextView _dateDisplay; Button _dateSelectBut ...
- xamarin.android 给View控件 添加数字提醒效果-BadgeView
本文代码从java项目移植到.net项目 java开源项目:https://github.com/jgilfelt/android-viewbadger using System; using S ...
- 五、Android学习第四天补充——Android的常用控件(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...
- Android自己定义控件:进度条的四种实现方式
前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...
随机推荐
- SQL中declare申明变量
在sql语句中加入�变量. declare @local_variable data_type 声明时须要指定变量的类型, 能够使用set和select对变量进行赋值, 在sql语句中就能够使用@lo ...
- 分享一个圆角自定义的漂亮AlertDialog
\res\drawable-hdpi\bg_title_custom_dialog.xml: <?xml version="1.0" encoding="utf-8 ...
- iOS6 / iOS7 状态栏高度适配
问题原因:iOS7的状态栏(status bar)不再占用单独的20px,所以假设你在iOS6上的界面布局是正常的,那么到了iOS7上就会变成以下这个样子: 左边是iOS6界面 ...
- 提升 composer 的执行速读
常常遇到 php composer.phar update 等待一二十分钟还没有更新完成的情况. 提升速读的方法: 1. 升级PHP 版本到5.4以上 2. 删除文件夹Vender(或者重命名),之后 ...
- C语言的ANSI/ISO标准
摘自:http://see.xidian.edu.cn/cpp/html/1658.html 从技术上讲有两种C语言标准,一种来自ANSI(American National Standard Ins ...
- 天池大数据周冠军分享|附移动推荐算法赛答辩会Top5选手PPT
上周是淘宝穿衣搭配算法大赛开始评测后的第一周,周冠军是来自浙江大学的"FUC AUTH"队.他们在夺得本周冠军之后,还将自己的获胜经验分享给了大家,究竟有什么秘诀呢? 阿里巴巴天池 ...
- 浅谈C/C++中的static和extern关键字 转
原文:http://developer.51cto.com/art/201104/256820.htm static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.extern, &quo ...
- Android(java)学习笔记92:泛型高级之通配符
package cn.itcast_07; import java.util.ArrayList; import java.util.Collection; /* * 泛型高级(通配符) * ?:任意 ...
- height、clientHeight、scrollHeight、offsetHeight区别
转自 http://www.cnblogs.com/yuteng/articles/1894578.html 我们来实现test中的onclick事件 function justAtest() ...
- 故事板 — 视图切换(segue)与传值
1.传值问题:为什么不能给控件的接口赋值 如执行Segue跳转 [self performSegueWithIdentifier:GAPlayeVideo sender:gaVideo]; //在跳转 ...