Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android CursorTreeAdapter 詳解

Android CursorTreeAdapter 詳解

編輯:Android開發實例

CursorTreeAdapter 通過該適配類可以用一連續的游標 (Coursor)對象訪問數據庫,並將查詢出來的數據展示到可伸縮的列表視圖 (ExpandableListView)部件上。頂層游標 (Cursor)對象 (在構造器中指定 )顯示全部組,後面的游標 (Cursor)對象從getChildrenCursor(Cursor) 獲取並展示子元素組。其中游標攜帶的結果集中必須有個名為“ _id”的列,否則這個類不起任何作用

 

 

結構

public abstract class CusrorTreeAdapter

         extends BaseExpandableListAdpater implements Filterable

 

java.lang.Object

android.widget.BaseExpandableListAdapter

         android.widget.CursorTreeAdapter

 

直接子類

         ResourceCursorTreeAdapter

間接子類

SimpleCursorTreeAdapter

 

 

構造函數

 

 

 

public CursorTreeAdapter (Cursor cursor, Context context)

           構造函數。每當數據庫的數據發生改變時,適配器將調用 requery()重新查詢以顯示最新的數據。

                  參數

   cursor       為組 (groups)提供數據的游標 (Coursor)

                  context    應用程序上下文。

 

public CursorTreeAdapter (Cursor cursor, Context context, boolean autoRequery)

           構造函數。

                   參數

    cursor       為組 (groups)提供數據的游標 (Coursor)

                   context    應用程序上下文。

                         autoRequery  設置為 true時,每當數據庫的數據發生改變時,適配器將調用 requery()重新查詢以顯示最新的數據。

 

抽象方法

 

protected abstract void bindChildView (View view, Context context, Cursor cursor,           boolean isLastChild)

    用游標 (Coursor)的方式將子元素數據綁定在一個已存在的視圖 (View)對象上。

                  參數

                            view              已存在的視圖 (View)對象 , 也就是之前 new出來的。

                            context          應用程序上下文對象

                            cursor            獲取數據的游標對象,它已經移動到正確的位置

                            IsLastChild    子元素是否處於組中的最後一個

 

    protected abstract void bindGroupView (View view, Context context, Cursor cursor,        boolean isExpanded)

    用游標 (Coursor)的方式將組數據綁定在一個已存在的視圖 (View)對象上。

                  參數

                            view              已存在的組視圖 (View)對象 , 也就是早先 new出來的。

                            context          應用程序上下文對象,它已經移動到正確的位置

                            cursor            獲取數據的游標對象

                            isExpanded   該組是展開狀態還是伸縮狀態

 

    protected abstract Cursor getChildrenCursor (Cursor groupCursor)

    獲取指定組中的子元素游標對象。子類必須實現這個方法,用於在指定組中返回子元素數據。

  如果你想用異步查詢的方式避免 UI阻塞的情況發生,可能會返回 null或是在稍後調用 setChildrenCursor(int, Cursor)

  你有責任在 Activity生命周期中管理這個游標對象,有一個非常好的思路:使用 managedQuery(Uri, String[], String, String[], String) 來管理它們。 在某些情況下,適配器本身會使游標停止工作,但這個特例不會總是出現,所以我們要確保有效地管理好游標對象。

                   參數

                            groupCursor  組游標對象,決定返回哪個組中的子元素游標對象。

                   返回值

                            返回指定組中的子元素游標對象或者為 null。

 

    protected abstract View newChildView (Context context, Cursor cursor, boolean     isLastChild, ViewGroup parent)

    創建一個新的子元素視圖並持有指向數據的游標 cursor。

                   參數

                            context          應用程序上下文對象

                            cursor            獲取數據的游標對象,它已經移動到正確的位置

                            IsLastChild   子元素是否處於組中的最後一個

                            parent      新視圖 (View)所依附於的父對象。

 

    protected abstract View newGroupView (Context context, Cursor cursor, boolean isExpanded, ViewGroup parent)

    創建一個新的組視圖並持有組中指向數據的游標 cursor。

                  參數

                            context          應用程序上下文對象

                            cursor            獲取數據的游標對象,它已經移動到正確的位置

                            isExpanded   該組是否展開狀態

                                parent       新視圖 (View) 所依附於的父對象。

 

用法 這裡主要是實現這幾個抽象方法

 

 

  1. public class CursorTreeAdapterExample extends CursorTreeAdapter {  
  2.         private int mGroupIdColumnIndex;  
  3.         private LayoutInflater mInflater;  
  4.         //注意這裡的游標是一級項的  
  5.         public CursorTreeAdapterExample(Cursor cursor, Context context) {  
  6.             super(cursor, context);  
  7.               
  8.             mGroupIdColumnIndex = cursor.getColumnIndexOrThrow(Phone._ID);  
  9.             mInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);  
  10.         }  
  11.         //注意這裡的游標是二級項的  
  12.         @Override 
  13.         protected void bindChildView(View view, Context context, Cursor cursor, boolean isExpanded) {  
  14.             // Bind the related data with this child view  
  15.             ((TextView)view).setText(cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));  
  16.         }  
  17.         @Override 
  18.         protected void bindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) {  
  19.             // Bind the related data with this group view  
  20.             ((TextView)view).setText(cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));  
  21.         }  
  22.         //注意這裡通過一次數據庫查詢才得到了二級項的數據  
  23.         @Override 
  24.         protected Cursor getChildrenCursor(Cursor groupCursor) {  
  25.             Uri.Builder builder = Phone.CONTENT_URI.buildUpon();  
  26.             ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));  
  27.             Uri phoneNumbersUri = builder.build();  
  28.             // The returned Cursor MUST be managed by us, so we use Activity's helper  
  29.             // functionality to manage it for us.  
  30.             return managedQuery(phoneNumbersUri, new String[] {Phone._ID, Phone.NUMBER}, null, null, null);  
  31.         }  
  32.         @Override 
  33.         protected View newChildView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) {  
  34.             Log.d(TAG, "newChildView");  
  35.               
  36.             TextView view = (TextView) mInflater.inflate(android.R.layout.simple_expandable_list_item_1, parent, false);  
  37.               
  38.             view.setText("  (" + cursor.getPosition() + ") " + cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));  
  39.               
  40.             return view;  
  41.         }  
  42.         @Override 
  43.         protected View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) {  
  44.             Log.d(TAG, "newGroupView");  
  45.             TextView view = (TextView) mInflater.inflate(android.R.layout.simple_expandable_list_item_1, parent, false);  
  46.             view.setText("  (" + cursor.getPosition() + ") " + cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));  
  47.               
  48.             return view;  
  49.         }  
  50.     } 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved