?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
SimpleCursorAdapter
版本:Android 3.0 r1
結(jié)構(gòu)
繼承關(guān)系
public class SimpleCusrorAdapter extends ResourceCusorAdpater
?
java.lang.Object
android.widget.BaseAdapter
???????? android.widget.CursorAdapter
??????????????????????????? android.widget.ResourceCursorAdapter
???????????????????????????????????? android.widget.SimpleCursorAdapter
?
類概述
這是一個(gè)用起來很方便的適配器類,它主要將Cursor與TexiView或ImageView進(jìn)行映射。比如,你想設(shè)定要展示三列,那么當(dāng)做好綁定之后,視圖就會(huì)展示你設(shè)定好的那些列;當(dāng)然了,視圖的外觀是定義在XML文件里面的,你只需用這個(gè)類與視圖做好綁定就可以了。與視圖綁定有兩個(gè)階段。第一階段:如果SimpleCursorAdapter.ViewBinder
可用,將會(huì)調(diào)用setViewValue(android.view.View,
android.database.Cursor, int)
方法。該方法返回true就說明綁定成功,否則返回false ,這就到了第二階段,SimpleCursorAdapter內(nèi)部開始自行綁定,過程是這樣的,若綁定到TextView上,調(diào)用setViewText();若綁定到ImageView上,調(diào)用setViewImage();如果視圖不是TextView或ImageView則拋出IllegalStateException異常。當(dāng)使用帶有過濾器的適配器時(shí),例如,在APIDemo中有個(gè)AutoCompleteTextView的例子,我們能使用SimpleCursorAdapter.CursorToStringConverter
和接口???????? FilterQueryProvider
來控制過濾過程。更多信息請(qǐng)參考convertToString(android.database.Cursor)
和runQueryOnBackgroundThread(CharSequence)
。
????????
內(nèi)部類
public interface SimpleCusorAdapter.ViewBinder????????
???????? 這個(gè)內(nèi)部接口可以在外部通過SimpleCursorAdapter.ViewBinder的方式進(jìn)行Cursor???? 與View的綁定。
?
public interface SimpleCusorAdapter.CursorToStringConverter
???????? 這個(gè)內(nèi)部接口可以在外部通過SimpleCursorAdapter.CursorToStringConverter的方式?? 定義怎樣將Cursor轉(zhuǎn)換成字符串。
?
構(gòu)造函數(shù)
public SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to)
???????? 構(gòu)造函數(shù)啟動(dòng)自動(dòng)重新查詢(auto-requery)。
???????? 這個(gè)構(gòu)造器已被標(biāo)記為棄用(@Deprecated) 。
該方法不推薦使用,Cursor查詢操作是執(zhí)行在應(yīng)用程序的UI線程當(dāng)中,那么會(huì)導(dǎo)致無響應(yīng)的情況。另一種方式是使用LoaderManager和CursorLoader來進(jìn)行。
???????? (譯者注:3.0已不推薦使用該構(gòu)造方法)
?????????????????? 參數(shù)
??????????????????????????? context? 應(yīng)用程序上下文,具體來說就是ListView所在的上下文當(dāng)中。
layout?????? 布局文件的資源定位標(biāo)識(shí)符,也就是說標(biāo)識(shí)了ListView中的item。那么這個(gè)布局文件至少包含了參數(shù)“to”中的傳進(jìn)來值。
??????????????????????????? c???????????????? 數(shù)據(jù)庫游標(biāo),如果游標(biāo)不可用則為null。
from?????????????????? 列名字列表,表示著你要綁定到UI上的列。如果游標(biāo)不可用則為null。
to?????????????? 展示參數(shù)“from”中的列,也就是說ListView中的視圖顯示的是參數(shù)“from”的列值,這些視圖應(yīng)該都是TextView。如果游標(biāo)不可用則為null。
?
public SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] ???? to,int flags)?????
???????? 該適配器類標(biāo)準(zhǔn)的構(gòu)造函數(shù)。(譯者注:3.0新添的構(gòu)造方法)
?????????????????? 參數(shù)
??????????????????????????? context? 應(yīng)用程序上下文,具體來說就是ListView所在的上下文當(dāng)中。
layout?????? 布局文件的資源定位標(biāo)識(shí)符,也就是說標(biāo)識(shí)了ListView中的item。那么這個(gè)布局文件至少包含了參數(shù)“to”中的傳進(jìn)來值。
??????????????????????????? c???????????????? 數(shù)據(jù)庫游標(biāo),如果游標(biāo)不可用則為null。
from?????????????????? 列名字列表,表示著你要綁定到UI上的列。如果游標(biāo)不可用則為null。
to?????????????? 展示參數(shù)“from”中的列,也就是說ListView中的視圖顯示的是參數(shù)“from”的列值,這些視圖應(yīng)該都是TextView。如果游標(biāo)不可用則為null。
flags?????????????????? 這個(gè)標(biāo)志用來決定該適配器的行為。(譯者注:Android3.0推薦我們傳遞CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER。設(shè)置標(biāo)志用來添加一個(gè)監(jiān)聽器,監(jiān)聽著參數(shù)cursor的數(shù)據(jù)是否有更變。)
?
公共方法
public void bindView (View view, Context context, Cursor cursor)
???????? 綁定所有構(gòu)造函數(shù)中的參數(shù)from(字段名)一一綁定到參數(shù)to(視圖資源ID)。與視圖綁定有兩個(gè)階段。第一階段:如果SimpleCursorAdapter.ViewBinder
可用,將會(huì)調(diào)用setViewValue(android.view.View,
android.database.Cursor, int)
方法。該方法返回true就說明綁定成功,否則返回false ,這就到了第二階段,SimpleCursorAdapter內(nèi)部開始自行綁定,過程是這樣的,若綁定到TextView上,調(diào)用setViewText();若綁定到ImageView上,調(diào)用setViewImage();如果視圖不是TextView或ImageView則拋出IllegalStateException異常。
參數(shù)
??????????????????????????? view? ?????????????? 已存在的視圖(View)對(duì)象, 也就是早先new出來的。
??????????????????????????? context? ???????? 應(yīng)用程序上下文。
??????????????????????????? cursor ????????????? 數(shù)據(jù)庫游標(biāo)。該游標(biāo)已經(jīng)移動(dòng)到指定位置上。
?????????????????? 異常
??????????????????????????? IllegalStateException 如果綁定的視圖中不是TextView或是ImageView則會(huì)?????????????????????????? 拋出這個(gè)異常。
?????????????????? 參見
?????????????????? ???????? bindView(android.view.View,
android.content.Context, android.database.Cursor)
?????????????????? ???????? getViewBinder()
?????????????????? ???????? setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)
???????? ?????????????????? setViewImage(ImageView,
String)
??????????????????????????? setViewText(TextView,
String)
?
public void changeCursorAndColumns(Cursor c, String[] from, int[] to)
???????? 同時(shí)更改Cursor與View的映射關(guān)系。
參數(shù)
??????????????????????????? c???????????????? 數(shù)據(jù)庫游標(biāo),如果游標(biāo)不可用則為null。?
from?????????????????? 列名字列表,表示著你要綁定到UI上的列。如果游標(biāo)不可用則為null。
to?????????????? 展示參數(shù)“from”中的列,也就是說ListView中的視圖顯示的是參數(shù)“from”的列值,這些視圖應(yīng)該都是TextView。如果游標(biāo)不可用則為null。
???????????????????????????
public CharSequence convertToString (Cursor cursor)
通過CursorToStringConverter接口實(shí)現(xiàn)并返回一個(gè)CharSequence? 類型的值,以表示指定的Cursor。如果沒有設(shè)置CursorToStringConverter,那么就會(huì)用另外的方式進(jìn)行轉(zhuǎn)換。如果列數(shù)為-1,或者 cursor為null返回空串,否則返回cursor.toString()。
?????????????????? 參數(shù)
??????????????????????????? cursor ????????????? 轉(zhuǎn)換為CharSequence的數(shù)據(jù)庫游標(biāo)。
???????? 返回值
?????????????????? 返回一個(gè)不為null的CharSequence類型來表示參數(shù)cursor。
?
public SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter ()
???????? 返回自定義的SimpleCursorAdapter.CursorToStringConverter的實(shí)現(xiàn)。
返回值
??????????????????????????? 如果沒有設(shè)置SimpleCursorAdapter.CursorToStringConverter,則為null。
參考
???????? setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
???????? getStringConversionColumn()
???????? setStringConversionColumn(int)
???????? convertToString(android.database.Cursor)
?
public int getStringConversionColumn ()
???????? 返回轉(zhuǎn)換成String類型的列位置。
返回值
???????? ?????????????????? 返回列位置,如果沒有則返回-1。
參考
??????????????????????????? convertToString(android.database.Cursor)
??????????????????????????? setStringConversionColumn(int)
???????? setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
??????????????????????????? getCursorToStringConverter()
?
public SimpleCursorAdapter.ViewBinder getViewBinder ()
返回SimpleCursorAdapter.ViewBinder引用,這個(gè)ViewBinder用來將數(shù)據(jù)綁定到視圖上的。
返回值
??????????????????????????? 如果ViewBinder不存在,則返回null。
參考
???????? bindView(android.view.View,
android.content.Context, android.database.Cursor)
???????? setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)
?
public void setCursorToStringConverter (SimpleCursorAdapter.CursorToStringConverter cursorToStringConverter)
設(shè)置String轉(zhuǎn)換器。
?????????????????? 參數(shù)
??????????????????????????? cursorToStringConverter? String轉(zhuǎn)換器,設(shè)置為null就意味著移除。
?????????????????? 參考
???????? setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
???????? getStringConversionColumn()
???????? setStringConversionColumn(int)
???????? convertToString(android.database.Cursor)
?
public void setStringConversionColumn (int stringConversionColumn)
設(shè)置Cursor中的列要轉(zhuǎn)換成String類型的位置。不過僅當(dāng)未設(shè)置CursorToStringConverter時(shí),這個(gè)列才會(huì)進(jìn)行默認(rèn)轉(zhuǎn)換。
?????????????????? 參數(shù)
??????????????????????????? stringConversionColumn? 列位置,如果參數(shù)為-1,則使用默認(rèn)轉(zhuǎn)換機(jī)制。
?????????????????? 參考
???????? convertToString(android.database.Cursor)
???????? getStringConversionColumn()
???????? setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
???????? getCursorToStringConverter()
?
public void setViewBinder (SimpleCursorAdapter.ViewBinder viewBinder)
設(shè)置視圖綁定器。
?????????????????? 參數(shù)
??????????????????????????? viewBinder? 視圖綁定器,可用為null刪除現(xiàn)有的綁定器。
?????????????????? 參考
???????? bindView(android.view.View,
android.content.Context, android.database.Cursor)
???????? getViewBinder()
?
public void setViewImage (ImageView v, String value)
僅當(dāng)ViewBinder不存在或是當(dāng)ViewBinder不為ImageView綁定時(shí)(也就是setViewValue()返回false),則這個(gè)方法會(huì)被bindView()調(diào)用,以便為ImageView設(shè)置圖片。默認(rèn)情況下,參數(shù)value作為圖片資源ID來看待,否則,會(huì)視為圖片的Uri。???????? 另外還可以通過過濾器來獲得更靈活的設(shè)置。
?????????????????? 參數(shù)
??????????????????????????? v???????????????? 圖片控件引用
??????????????????????????? value???????? 圖片資源ID,是從Cursor獲取到的。
?
public void setViewText (TextView v, String text)
僅當(dāng)ViewBinder不存在或是當(dāng)ViewBinder不為TextView綁定時(shí)(也就是setViewValue()返回false),則這個(gè)方法會(huì)被bindView()調(diào)用,以便為TextView設(shè)置文本??捎弥貙戇m配器從數(shù)據(jù)庫中檢索過濾字符串。
?????????????????? 參數(shù)
??????????????????????????? v???????????????? 文本控件引用
??????????????????????????? value???????? 為文本控件設(shè)置的文本信息(譯者注:是從Cursor獲取到的)。
?
public Cursor swapCursor (Cursor c)
交換兩個(gè)Cursor的列以及它們的數(shù)據(jù),并最終返回的還是舊的Cursor。不同于changeCursor(Cursor)
的是,舊的Cursor非但不會(huì)關(guān)閉,而且還會(huì)返回出去。(譯者注:?????? 3.0新添的方法)
?????????????????? 參數(shù)
??????????????????????????? c? 新的Cursor對(duì)象。
?????????????????? 返回值
返回舊的Cursor引用,如果參數(shù)cursor不可用,則返回null。如果參數(shù)cursor與原來的Cursor引用相同,那么也返回null。
?
補(bǔ)充
???????? 文章精選
?????????????????? ArrayAdapter和SimpleCursorAdapter例子
?????????????????? Android API : SimpleCursorAdapter()
?