編輯: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) 所依附於的父對象。
用法 這裡主要是實現這幾個抽象方法
- public class CursorTreeAdapterExample extends CursorTreeAdapter {
- private int mGroupIdColumnIndex;
- private LayoutInflater mInflater;
- //注意這裡的游標是一級項的
- public CursorTreeAdapterExample(Cursor cursor, Context context) {
- super(cursor, context);
- mGroupIdColumnIndex = cursor.getColumnIndexOrThrow(Phone._ID);
- mInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
- }
- //注意這裡的游標是二級項的
- @Override
- protected void bindChildView(View view, Context context, Cursor cursor, boolean isExpanded) {
- // Bind the related data with this child view
- ((TextView)view).setText(cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
- }
- @Override
- protected void bindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) {
- // Bind the related data with this group view
- ((TextView)view).setText(cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));
- }
- //注意這裡通過一次數據庫查詢才得到了二級項的數據
- @Override
- protected Cursor getChildrenCursor(Cursor groupCursor) {
- Uri.Builder builder = Phone.CONTENT_URI.buildUpon();
- ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex));
- Uri phoneNumbersUri = builder.build();
- // The returned Cursor MUST be managed by us, so we use Activity's helper
- // functionality to manage it for us.
- return managedQuery(phoneNumbersUri, new String[] {Phone._ID, Phone.NUMBER}, null, null, null);
- }
- @Override
- protected View newChildView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) {
- Log.d(TAG, "newChildView");
- TextView view = (TextView) mInflater.inflate(android.R.layout.simple_expandable_list_item_1, parent, false);
- view.setText(" (" + cursor.getPosition() + ") " + cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
- return view;
- }
- @Override
- protected View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) {
- Log.d(TAG, "newGroupView");
- TextView view = (TextView) mInflater.inflate(android.R.layout.simple_expandable_list_item_1, parent, false);
- view.setText(" (" + cursor.getPosition() + ") " + cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME)));
- return view;
- }
- }
前言 SQLite是一種輕量級的小型數據庫,雖然比較小,但是功能相對比較完善,一些常見的數據庫基本功能也具有,在現在的嵌入式系統中使用該數據庫的比較多,因為
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我