Android ResourcCursorAdapter的使用

關於 ResourceCursorAdapter的使用,和我上一篇的CursorAdapter的使用沒有太大的區別,這裏我就用拿來主義了。

正文

  一、結構

public abstract class ResourceCursorAdapter extends CursorAdapter

        

java.lang.Object

         android.widget.BaseAdapter

                   android.widget.CursorAdapter

                            android.widget.ResourceCursorAdapter

 

直接子類

         SimpleCursorAdapter

 

  二、概述

    這是一個簡單的適配器,通過指定一個定義了視圖UIXML文件來創建視圖。

 

  三、構造函數

         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       用於創建列表項視圖的佈局資源

示例:

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);
    }
}


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章