本文为通过自定义列表适配器定义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——数据绑定到控件(四)的更多相关文章

  1. xamarin android——数据绑定到控件(二)

    本示例为通过媒体内容提供器获取本机中的图片显示在Gallery中. 活动中简单的初始化代码 private void InitGallery() { Gallery gallery = FindVie ...

  2. xamarin android——数据绑定到控件(三)

    如果当前活动中,只存在一个listview视图,可以借助ListActivity快速的实现一个列表,即当前Activity继承ListActivity.在OnCreate方法中简单的两行代码,就可以创 ...

  3. xamarin android——数据绑定到控件(一)

    mono for android 中光标由ICursor 接口标识,该接口公开了操作结果数据集的所有方法.光标的使用非常消耗系统资源,所以不使用时应该光比光标.可以通过StartManagingCur ...

  4. 安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等

    本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...

  5. Xamarin.android 重写axml控件

    https://www.cnblogs.com/lonelyxmas/p/5632694.html <Laco: 用来用引指定的控件            android:layout_widt ...

  6. Xamarin.Android DatePickerFragment 日期控件

    MainActivity 代码: public class MainActivity : Activity { TextView _dateDisplay; Button _dateSelectBut ...

  7. xamarin.android 给View控件 添加数字提醒效果-BadgeView

    本文代码从java项目移植到.net项目   java开源项目:https://github.com/jgilfelt/android-viewbadger using System; using S ...

  8. 五、Android学习第四天补充——Android的常用控件(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...

  9. Android自己定义控件:进度条的四种实现方式

    前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://down ...

随机推荐

  1. java中接口的定义与实现

    1.定义接口     使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...

  2. 在VS2012中GridView的一个坑

    使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...

  3. android140 360 黑名单 启动service和分页加载

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  4. win7关机命令

    通过 DOS 命令 “shutdown” 来实现 Windows7 系统下的定时关机功能. 使用at 命令 at 12:00 shutdown -s,取消:at/delete shutdown -s ...

  5. Spark之路 --- Scala用JFreeChart画图表实例

    JFreeChart介绍 JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用 ...

  6. java_字符

    例一:数据类型转换 package javaweb1200; public class 字符就是数字吗 { public static void main(String[] args) { Syste ...

  7. 《Entity Framework 6 Recipes》中文翻译——第十二章自定义EntityFramework对象(一)

    本章的方法探讨一些可以应用于对象和实体框架的流程定制.这些方法涵盖了许多“幕后”的东西,它可以使你的代码更统一,比如通过更关注应用程序核心业务规则执行的细节,应用范围更广泛.我们开始本章的一个方法,告 ...

  8. Maven学习小结(七 生命周期[转])

    Maven2的阶段(生命周期)说明:Maven2拥有三套独立的生命周期,Maven的命令也是基于这些生命周期来说的.1.clean:清理先前构建的构件,又分为下面三个下阶段: a.pre-clean ...

  9. Balanced Lineup(最简单的线段树题目)

    Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 33389   Accepted: 15665 Case Time Limit ...

  10. Android(java)学习笔记101:WindowManager 中LayoutParams的各种属性

    WindowManager 中LayoutParams的各种属性 WindowManager.LayoutParams 是 WindowManager 接口的嵌套类(内部类):它继承于 ViewGro ...