您好,登錄后才能下訂單哦!
CursorAdapter:通過該類可以用Cursor的方式訪問數據庫,并將查詢出來的數據展示到列表視圖(ListView)部件上。其中游標攜帶的結果集中必須有列名為“_id”的列,否則這個類無法工作。
sqlite查詢獲得Cursor,可以通過CursorAdapter將數據方便的顯示在listview上.
使用方法:與BaseAdapter類似,需要重寫CursorAdapter中的一些方法
下面用偽代碼演示主要步驟:
CursorAdapter:
1.繼承適配器:
class Myadapter extends CursorAdapter
2.構造函數://需要傳入上下文,游標對象,用于遍歷數據
public Myadapter(Context context, Cursor c) {
super(context, c);
}
2.newView():
inflate行布局
3.bindView()
在行布局中顯示當前cursor所指向的數據
listview:
1.獲得listview實例
ListView listview = findviewbyid(R.id.listview);
2.設置適配器
listview.setAdapter(myadapter);//cursor = db.query();
//myadapter = new Myadapter(this,cursor)
幾點思考:
1.學完CursorAdapter后,想起之前學習BaseAdapter時候的優化,便想對其也進行優化,發現CursorAdapter中并沒有convertview,而且其將getView分成了newView和bindView,百思不得其解.百度之后才發現,原來系統已經幫我們做了一步優化,其內部代碼
public View getView(int position, View convertView, ViewGroup parent) { if (!mDataValid) { throw new IllegalStateException("this should only be called when the cursor is valid"); } if (!mCursor.moveToPosition(position)) { throw new IllegalStateException("couldn't move cursor to position " + position); } View v; if (convertView == null) { v = newView(mContext, mCursor, parent); } else { v = convertView; } bindView(v, mContext, mCursor); return v; }
當convertView==null的時候才去調用newView.
2.如何獲得id?
記得CursorAdapter要求我們必須以_id作為主鍵不?系統幫我們把_id通過getItemId()返回,再傳遞到一些對象方法中,如:
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { db.delete("contact", "_id=?", new String[]{String.valueOf(id)}); Cursor cursor = db.query("contact", null, null, null, null, null, null); myadapter.changeCursor(cursor); myadapter.notifyDataSetChanged(); Log.e("id", id+""); } });
代碼為刪除listview點擊行顯示的表"contact"的數據.long id 即為系統幫我們傳遞過來的_id.這是通過getItemId()返回的,若要修改id,可以重寫此方法.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。