参考《Professional Android 4 Development》

Adapters简介

Adapter用于将数据和实现AdapterView接口的ViewGroup绑定在一起。Android SDK内置了很多Adapter,比较常用的有这两个:

  • ArrayAdapter:将Array和一个Adapter View绑定到一起,默认调用Array中对象的toString方法并将String其填充到Text View中。
  • SimpleCursorAdapter:将Adapter View和Cursor中的列绑定到一起。

自定义ArrayAdapter

ArrayAdapter的默认功能是调用Array中对象的toString()方法,然后这些String将显示在TextView中。显然,我们可以将这个模式推广到更多的应用场景中,方法就是使用自定义ArrayAdapter。

自定义ArrayAdapter最常用的方法是重写(override)ArrayAdapter中的getView方法,如:

public class MyArrayAdapter extends ArrayAdapter<MyClass> {
  int resource;
  public MyArrayAdapter(Context context, int _resource, List<MyClass> items) {
    super(context, _resource, items);
    resource = _resource;
  }
  @Override
  public View getViewew (int position, View convertView, ViewGroup parent) {
    // Create and inflate the View to display
    LinearLayout newView;
    if (convertView == null) {
      // Inflate a new view if this is not an update.
      newView = new LinearLayout(getContext());
      String inflater = Context.LAYOUT_INFLATER_SERVICE;
      LayoutInflater li;
      li = (LayoutInflater)getContext().getSystemService(inflater);
      li.inflate(resource, newView, true);
    } else {
      // Otherwise we’ll update the existing View
      newView = (LinearLayout)convertView;
    }
    MyClass classInstance = getItem(position);
    // TODO Retrieve values to display from the classInstance variable.
    // TODO Get references to the Views to populate from the layout.
    // TODO Populate the Views with object property values.
    return newView;
  }

getView的参数分别是要显示的item在数组中的位置,即将更新的View,以及这个View所在的ViewGroup。

使用Adapter将Data和View绑到一起

ArrayList<String> myStringArray = new ArrayList<String>();
int layoutID = android.R.layout.simple_list_item_1;
ArrayAdapter<String> myAdapterInstance;
myAdapterInstance =
new ArrayAdapter<String>(this, layoutID, myStringArray);
myListView.setAdapter(myAdapterInstance);

上面的例子将String和TextView绑到一起,是ArrayAdapter中最简单的情形。

Simple Cursor Adapter

LoaderManager.LoaderCallbacks<Cursor> loaded = new LoaderManager.LoaderCallbacks<Cu rsor>() {
  public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    CursorLoader loader = new CursorLoader(MyActivity.this,
    CallLog.CONTENT_URI, null, null, null, null);
    return loader;
  }
  public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    String[] fromColumns = new String[] {CallLog.Calls.CACHED_NAME,
    CallLog.Calls.NUMBER};
    int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView};
    SimpleCursorAdapter myAdapter;
    myAdapter = new SimpleCursorAdapter(MyActivity.this,
                        R.layout.mysimplecursorlayout,
                        cursor,
                        fromColumns,
                        toLayoutIDs);
    myListView.setAdapter(myAdapter);
  }
  public void onLoaderReset(Loader<Cursor> loader) {}
};
getLoaderManager().initLoader(0, null, loaded);

SimpleCursorAdapter构造函数的参数分别为当前的context,显示cursor中数据的View Layout,Cursor,以及两个同样大小的整型数组:一个包含columns的index,另一个包含resource id。

Android 4 学习(10):Adapters简介的更多相关文章

  1. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  2. Android Animation学习(一) Property Animation原理介绍和API简介

    Android Animation学习(一) Property Animation介绍 Android Animation Android framework提供了两种动画系统: property a ...

  3. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  4. Android Animation学习(二) ApiDemos解析:基本Animatiors使用

    Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.ObjectAnimator.AnimatorSet ApiDemos中Animation部分是单独 ...

  5. 我的Android 4 学习系列之文件、保存状态和首选项

    目录 使用Shared Preference 保留简单的应用程序数据 保存回话间的Activity实例数据 管理应用程序首选项和创建Preference Screen 保存并加载文件以及管理本地文件系 ...

  6. Android JNI学习(二)——实战JNI之“hello world”

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  7. Android 蓝牙学习

    Android 蓝牙学习 学习缘由 上个礼拜公司要开发个简单的五子棋游戏!其中一个需求就是支持蓝牙对战!所以苦逼的我学习蓝牙方面的知识了! 简介 Bluetooth是目前使用最广泛的无线通讯协议,近距 ...

  8. Android开发学习路线的七个阶段和步骤

    Android开发学习路线的七个阶段和步骤           Android学习参考路线     第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...

  9. Android动画学习(二)——Tween Animation

    前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...

随机推荐

  1. 【Python】UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3

    问题如下: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3 解决方法: 程序开始加上下面两句 sys ...

  2. Mac PyCharm专业版破解

    1. 先在PyCharm官网:http://www.https://www.jetbrains.com/pycharm/,下载PyCharm专业版安装包 2. 安装PyCharm 3. 终端执行: s ...

  3. android实现log日志输出

    1.下载android的log4j的库(的封装) 去: http://code.google.com/p/android-logging-log4j/ 下载对应的 android-logging-lo ...

  4. Celery分布式应用

    最近有应用需要部署到不同的服务器上运行,但是有没有PBS这样的调度系统,就想起来Python的调度神器 Celery.现在针对我的实际应用做一些记录. 1. 安装 因为我并不注重结果而是把命令拿到不同 ...

  5. Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示

    功能需求: 分省市统计并展示全国雨量站的数目与位置. 常规做法: 分省市雨量站的数目通过统计表的形式在页面端展示,位置根据XY坐标信息将雨量站标绘在图上. 优化做法: 去掉统计图的展示方式,直接将各省 ...

  6. toString 和 valueOf 总结

    两者的共同点与不同点: 共同点:二者都能用来数据转换,并且在输出对象时会自动调用. 不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString,没有操作 ...

  7. Django之模板(Template)

    Django模板系统 官方文档 每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插 ...

  8. 通过设置debug_options调试squid

    debug_options用于设置输出到access.log中的调试信息的模块和级别,默认为ALL,1. ALL指所有模块,每个源文件被赋予一个唯一的模块号 1指级别,完全调试的级别为9.很显然,设置 ...

  9. 剑指Offer面试题:6.旋转数组中的最小数字

    一 题目:旋转数组中的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1, ...

  10. 关于 self = [super init];

    [plain] view plaincopyprint? - (id)init { self = [super init]; // Call a designated initializer here ...