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中對應行的列值進行填充的。

相關文章
相關標籤/搜索