前言
本章內容是android.widget.ResourceCursorAdapter,版本為Android 2.3 r1,翻譯來自"HalZhang",。
正文
一、結構
public abstract class ResourceCursorAdapter extends CursorAdapter
java.lang.Object
android.widget.BaseAdapter
android.widget.CursorAdapter
android.widget.ResourceCursorAdapter
直接子類
SimpleCursorAdapter
二、概述
這是一個簡單的適配器,通過指定一個定義了視圖UI的XML文件來創建視圖。
三、構造函數
public ResourceCursorAdapter (Context context, int layout, Cursor c)
構造函數
參數
Context 與ListView相關的正在運行的 SimpleListItemFactory上下文
layout 一個定義了列表項視圖的布局文件資源ID,這個布局同時定義列表項視圖和下拉視圖,直到你重寫它們。
c 獲取數據的游標
public ResourceCursorAdapter (Context context,int layout, Cursor c, boolean autoRequery)
構造函數
參數
Context 與ListView相關的正在運行的 SimpleListItemFactory上下文
layout 一個定義了列表項視圖的布局文件資源ID,這個布局同時定義列表項視圖和下拉視圖,直到你重寫它們。
c 獲取數據的游標
autoRequery 如果此參數為true,當適配器的數據發生變化的時,適配器會調用游標的requery()方法,使最新的數據始終顯示。
四、公共方法
public View newDropDownView (Context context, Cursor cursor, ViewGroup parent)
生成一個新的下拉視圖來控制游標指向的數據
參數
context 應用程序全局信息接口(應用上下文)
cursor 獲取數據的游標,它已經移動到正確的位置
parent 與新視圖相關聯的上級視圖
返回值
新創建的視圖
public View newView (Context context, Cursor cursor, ViewGroup parent)
根據指定的xml文件創建視圖
參數
context 應用程序全局信息接口(應用上下文)
cursor 獲取數據的游標,它已經移動到正確的位置
parent 與新視圖相關聯的上級視圖
返回值
新創建的視圖
參見
newView(android.content.Context, android.database.Cursor, ViewGroup)
public void setDropDownViewResource (int dropDownLayout)
設置下拉視圖相應的布局資源
參數
dropDownLayout 用於創建下拉視圖的布局資源
public void setViewResource (int layout)
設置列表項視圖相應的布局資源
參數
layout 用於創建列表項視圖的布局資源
五、補充
文章精選
ListActivity簡介
代碼示例(ApiDemos\src\com\example\android\apis\app\QuickContactsDemo.java)
public class QuickContactsDemo extends ListActivity {
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID, // 0
Contacts.DISPLAY_NAME, // 1
Contacts.STARRED, // 2
Contacts.TIMES_CONTACTED, // 3
Contacts.CONTACT_PRESENCE, // 4
Contacts.PHOTO_ID, // 5
Contacts.LOOKUP_KEY, // 6
Contacts.HAS_PHONE_NUMBER, // 7
};
static final int SUMMARY_ID_COLUMN_INDEX = 0;
static final int SUMMARY_NAME_COLUMN_INDEX = 1;
static final int SUMMARY_STARRED_COLUMN_INDEX = 2;
static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;
static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;
static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;
static final int SUMMARY_LOOKUP_KEY = 6;
static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ Contacts.DISPLAY_NAME + " != '' ))";
Cursor c =
getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,
null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
startManagingCursor(c);
ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.quick_contacts, c);
setListAdapter(adapter);
}
private final class ContactListItemAdapter extends ResourceCursorAdapter {
public ContactListItemAdapter(Context context, int layout, Cursor c) {
super(context, layout, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
final ContactListItemCache cache = (ContactListItemCache) view.getTag();
TextView nameView = cache.nameView;
QuickContactBadge photoView = cache.photoView;
// Set the name
cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer);
int size = cache.nameBuffer.sizeCopied;
cache.nameView.setText(cache.nameBuffer.data, 0, size);
final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = super.newView(context, cursor, parent);
ContactListItemCache cache = new ContactListItemCache();
cache.nameView = (TextView) view.findViewById(R.id.name);
cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge);
view.setTag(cache);
return view;
}
}
final static class ContactListItemCache {
public TextView nameView;
public QuickContactBadge photoView;
public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
}
}