Adapter用来把数据绑定到扩展了AdapterView类的视图组(例如:ListView或Gallery)。Adapter负责创建代表所绑定父视图中的底层数据的子视图。

可以创建自己的Adapter类,构建自己的由AdapterView派生的控件。

也就是上述的各个类都可以使用Adapter类。

Adapter类解析:

在很多时候,都不需要从创建自己的Adapter。Android提供了一个Adapter集合,用于从公共数据源(包括数组和游标)来向扩展了AdapterView的原生控件提供数据。因为Adapter既负责提供数据,又负责创建代表每一条目的视图,所以Adapter可以从根本上修改它所绑定的控件的外观和功能。

Android SDK提供了多种Adapter,比如:ArrayAdapter、SimpleCursorAdapter等...

ArrayAdapter使用泛型来把Adapter视图绑定到一个指定类的对象的数组。默认情况下,ArrayAdapter使用数组中每个对象的toString值来创建和填充文本视图。

SimpleCursorAdapter可以把一个布局中的视图和游标的特定列绑定到一起。可以指定一个将被填充以显示每个子视图的XML布局,然后把游标中的每一列和那个布局中的特定视图进行绑定。Adapter将为每一个游标项创建一个新的视图,并将布局填充到视图中,使用游标中对应列的值填充布局中的每个视图。

在大多数情况下,需要定制ArrayAdapter来填充每个视图使用的布局,以表示底层的数组数据。为此需要使用特定类型的变体来扩展ArrayAdapter,并重写getView方法来向布局视图分配对象属性。

其中的getView()的参数描述了要显示的条目的位置,要更新的视图,以及将包好这个新视图的视图组。getItem()将返回存储在底层数组的指定索引位置的值。

1 自定义的ArrayAdapter

实例效果如下:

每一个Item的View是自定义的View。

package com.demo.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.demo.R;
import com.demo.domain.ToDoItem;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;
public class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {
private int mResource;
public ToDoItemAdapter(Context context, int resource, List<ToDoItem> objects) {
super(context, resource, objects);
// 初始化时,传递xml布局
this.mResource = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RelativeLayout todoView;
ToDoItem item = getItem(position);
String taskString = item.getTask();
Date createdDate = item.getCreated();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
String dataString = sdf.format(createdDate);
if (convertView == null) {
// 初始化View布局
todoView = new RelativeLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li;
li = (LayoutInflater) getContext().getSystemService(inflater);
li.inflate(mResource, todoView, true);
} else {
todoView = (RelativeLayout) convertView;
}
TextView taskView = (TextView) todoView.findViewById(R.id.row);
TextView dateView = (TextView) todoView.findViewById(R.id.tv_date);
taskView.setText(taskString);
dateView.setText(dataString);
return todoView;
}
}

自定义ArrayAdapter时,其Item的View是自定义的xml定义的布局;与视图绑定的数据,也是来自自定义的实例类。

// 获取数据
ToDoItem item = getItem(position);

getItem()将返回存储在底层数组的指定索引位置的值。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="@color/notepad_paper"
android:fadingEdge="vertical"
android:padding="10dp"
android:scrollbars="vertical"
android:textColor="#f000" />
<com.demo.view.TextViewDesign
android:id="@+id/row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/tv_date"
android:fadingEdge="vertical"
android:padding="10dp"
android:scrollbars="vertical"
android:textColor="@color/notepad_text" >
</com.demo.view.TextViewDesign>
</RelativeLayout>

实例类:

package com.demo.domain;
import java.sql.Date;
import java.text.SimpleDateFormat;
/**
* <功能描述> 待办事件实体类
*
* @author Administrator
*/
public class ToDoItem {
private String task;
private Date created;
public String getTask() {
return task;
}
public Date getCreated() {
return created;
}
public ToDoItem(String _task) {
this(_task, new Date(System.currentTimeMillis()));
}
public ToDoItem(String _task, Date _created) {
task = _task;
created = _created;
}
@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
String dateString = sdf.format(created);
return "(" + dateString + ") " + task;
}
}

2 自定义SimpleCursorAdapter

SimpleCursorAdapter用于将一个Cursor绑定到一个AdapterView,并使用一个布局来定义每个行/条目的UI。每个行的视图的内容是用底层Cursor中对应行的列值进行填充的。

Android中Adapter类的使用 “Adapter”的更多相关文章

  1. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  2. android中Handle类的用法

    android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...

  3. Android中一个类实现的接口数不能超过七个

    近期一段时间,在开发Android应用程序的过程中,发现Android中一个类实现的接口数超过七个的时候,常常会出现超过第7个之后的接口不能正常使用.

  4. Android中Cursor类的概念和用法[转]

    首页 > 程序开发 > 移动开发 > Android > 正文   Android中Cursor类的概念和用法 2011-09-07      0个评论       收藏    ...

  5. Android中Application类的详解:

    Android中Application类的详解: 我们在平时的开发中,有时候可能会须要一些全局数据.来让应用中的全部Activity和View都能訪问到.大家在遇到这样的情况时,可能首先会想到自定义一 ...

  6. Android中利用ViewHolder优化自定义Adapter的典型写法

    利用ViewHolder优化自定义Adapter的典型写法 最近写Adapter写得多了,慢慢就熟悉了. 用ViewHolder,主要是进行一些性能优化,减少一些不必要的重复操作.(WXD同学教我的. ...

  7. Android中ListView 控件与 Adapter 适配器如何使用?

    一个android应用的成功与否,其界面设计至关重要.为了更好的进行android ui设计,我们常常需要借助一些控件和适配器.今天小编在android培训网站上搜罗了一些有关ListView 控件与 ...

  8. [转]Android中Application类的用法

    原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...

  9. 【转】Android中Application类用法

    转自:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application和A ...

随机推荐

  1. kali linux工具--信息批量收集工具theharvester

    在渗透测试早期阶段,安全人员往往需要从互联网快速获取目标的一些信息,以确认测试目标的概况.为了满足这个需求,Kali Linux提供了theharvester工具.该工具可以搜索引擎.社交网站获取目标 ...

  2. Python面向对象之反射

    一.反射的基本概念 二.反射示例 三.反射的应用 一.反射的基本概念 反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python中一切皆对象,都可以使用反射. 反射有 ...

  3. jQuery循环遍历取值

    1:循环遍历取值 var arr = new Array(); $(".plus-tag a span").each(function(i) { arr[i] = $(this). ...

  4. CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解决方法

    1.停用mysql服务:# /etc/rc.d/init.d/mysqld stop 2.输入命令:# mysqld_safe --user=mysql --skip-grant-tables --s ...

  5. ZOJ 3604 Tunnel Network(凯莱定理)

    题目链接: E - Tunnel Network ZOJ - 3604 题目大意: 给定编号1-n的点,和给定编号1-S 的联通图,刚开始1号联通图只有 1个顶点,就是编号为1的顶点,2号联通图也只有 ...

  6. 吴恩达《机器学习》课程笔记——第七章:Logistic回归

    上一篇  ※※※※※※※※  [回到目录]  ※※※※※※※※  下一篇 7.1 分类问题 本节内容:什么是分类 之前的章节介绍的都是回归问题,接下来是分类问题.所谓的分类问题是指输出变量为有限个离散 ...

  7. MailKit系列之附件分离

    本文主要谈谈实现思路,不提供完整代码 一.分离基础 1.MIME邮件的multipart类型 引用文章:https://blog.csdn.net/wangyu13476969128/article/ ...

  8. 解决 win10 新建文件夹重命名卡死的另一种方法

    遇到 win10 新建文件夹重命名卡死时 根据网上的各种方法都不起作用时可以试一下这个方法. 文件夹属性 --- 自定义 --- 你想要那种文件夹 优化此文件夹 --- 把 [视频] 改成 [常规项目 ...

  9. VUE 滚动插件(better-scroll)

    1. 概述 1.1 说明 better-scroll是一款重点解决移动端(已支持PC)各种滚动场景需求的插件.例如淘宝聚划算中的类型选择(女装/家纺/生鲜美食等),没有滚动条显示却实现了滚动功能. 1 ...

  10. 移动端右侧导航 显示隐藏js

    transform与fixed影响 html按钮 <span class="nav-btn"></span> <span class="cl ...