参考《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. 下载并安装Prism5.0库 Download and Setup Prism Library 5.0 for WPF(英汉对照版)

    Learn what’s included in Prism 5.0 including the documentation, WPF code samples, and libraries. Add ...

  2. Struts01---入门小案例

    创建web项目    实现的效果! 用户点击页面不同的链接,后台调用不同的代码! 创建两个类实现共同的接口! public interface Action { String execute(); } ...

  3. 集合中的工具类Collections和Arrays

    集合框架的工具类: Collections: 方法sort(): List<String> list = new ArrayList<String>();        lis ...

  4. zend studio 提升开发效率的快捷键及可视化订制相关设置

    Zend studio快捷键使用 F3 快速跳转到当前所指的函数,常量,方法,类的定义处,相当常用.当然还可以用Ctrl+鼠标左键 shift+end 此行第一个到最后一个 shift+home 此行 ...

  5. 高级C/C++编译技术之读书笔记(五)之动态库版本控制

    最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...

  6. map/reduce类简单介绍

    在Hadoop的mapper类中,有4个主要的函数,分别是:setup,clearup,map,run.代码如下: protected void setup(Context context) thro ...

  7. 51nod 1495 中国好区间

    阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是>=k的,且该区间的第k大的那个数,一定大于等于T.那么问题来了,阿尔法想知道有多少好的区间. 由于阿尔法的序 ...

  8. 【转】C# Socket编程(4)初识Socket和数据流

    [转自:https://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html] 经过前面基础知识作为背景,现在对Soc ...

  9. [BZOJ5290][HNOI2018]道路

    bzoj luogu sol 考场上普及\(dp\)都做不来,果然是思想僵化了. 设\(f[u][i][j]\)表示在\(u\)点,上方有\(i\)条未修复的公路和\(j\)条未修复的铁路的最小花费. ...

  10. 转载 关于include尖括号和双引号的区别。

    对于使用尖括号( < >),预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而对于使用双引号(“ ”),cpp在当前目录中搜寻头文件,这个选项的作用是 ...