Android中Adapter类的使用 “Adapter”

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

能够建立本身的Adapter类,构建本身的由AdapterView派生的控件。java

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

Adapter类解析:sql

在不少时候,都不须要从建立本身的Adapter。Android提供了一个Adapter集合,用于从公共数据源(包括数组和游标)来向扩展了AdapterView的原生控件提供数据。由于Adapter既负责提供数据,又负责建立表明每一条目的视图,因此Adapter能够从根本上修改它所绑定的控件的外观和功能。数组

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

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

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

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

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

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中对应行的列值进行填充的。

相关文章
相关标签/搜索