Cursor的使用

來源:互聯網
上載者:User

查詢資料庫均會把查詢的結果封裝在一個Cursor的子類對象中返回。Cursor就像是位於結果集之上的一個遊標,可以對結果集進行向前、向後或隨機的訪問。而Cursor本身是一個介面類,提供了對結果集訪問的一些抽象方法,根據功能的不同在其子類有著不同的實現。要控制查詢時返回的Cursor類型,可以自訂一個繼承自CursorFactory類通過實現其newCursor()方法來返回需要的Cursor子類對象,但在CursorFactory傳入null的預設情況下,查詢操作會返回一個指向第一行資料之前的SQLiteCursor的對象。

對Cursor中常用的一些方法的介紹。

 

有關Cursor的常用方法

在實際的應用編寫過程中,更多是通過適配器(Adapter)來將Cursor與適配器控制項聯絡起來。Android為Cursor提供了一個抽象類別CursorAdapter,可以方便實現Cursor與適配器的串連。只需要建立一個繼承自CursorAdapter的類,實現其bindView()和newView()兩個抽象方法,或根據需要重新實現其他方法就可以用此類來構造一個可適配Cursor的適配器。下面是關於bindView()和newView()兩個抽象方法需要實現的內容。

  • public void bindView(View view, Context context, Cursor cursor)
    重用一個已有的view,使其顯示當前cursor所指向的資料。
  • public View newView(Context context, Cursor cursor, ViewGroup parent)
    為cursor所指向的資料建立一個View對象,並顯示其資料。

另外還需要注意的是,傳入到CursorAdapter中的Cursor結果集必須包含有列名為_id的列,否則CursorAdapter將不會起作用。

Adapter 的作用是什麼,想必大家看了Android SDK中的原文就一目瞭然:
An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set.

已經介紹到了幾種Android已經實現好了的適配器,其中SimpleCursorAdapter就是為Cursor對象專門實現的一種方便使用的適配器類,下面是對其構造方法傳入參數的介紹:

public SimpleCursorAdapter (Context contex, int layout, Cursor c, String[]from, int[] to)

  • context,當前程式的內容物件。
  • layout,用來描述如何顯示在適配器控制項上的布局檔案的R類引用。
  • from,由需要顯示出來的列名組成的字串數組。
  • to,由layout所指定的布局檔案中子控制項的id所組成的整形數組,與from相對應。
綜合前面的說明,舉個具體例子如下:

變數以便在程式中引用:
TextView display;
Spinner s;

填充Spinner控制項的代碼:
s = (Spinner)findViewById(R.id.spinner);
display = (TextView)findViewById(R.id.display);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_item,
c,
new String[] { MyHelper.COUNTRY},
new int[] {android.R.id.text1});
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
s.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> adapter,View v,int pos, long id)
{
c.moveToPosition(pos);
display.setText(c.getString(codeIndex));
}
public void onNothingSelected(AdapterView<?> arg0) {}
});

首先通過id分別獲得TextView和Spinner對象的引用,然後使用之前查詢返回的Cursor和Android 內建的Spinner子控制項的布局構造一個SimpleCursorAdapter,再調用setDrop-DownViewResource()方法來設定點開Spinner後顯示子控制項的布局,最後設定Spinner的適配器為adapter並對其子控制項被選取的事件設定一個監聽器。需要注意的是Spinner不支援設定點擊事件的監聽器(OnClickListener),強行設定的話會拋出異常。最後程式啟動並執行結果,如所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.