【移動應(yīng)用開發(fā)技術(shù)】Android應(yīng)用中onLoadFinished與onLoaderReset如何進行回調(diào)_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android應(yīng)用中onLoadFinished與onLoaderReset如何進行回調(diào)_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android應(yīng)用中onLoadFinished與onLoaderReset如何進行回調(diào)_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android應(yīng)用中onLoadFinished與onLoaderReset如何進行回調(diào)_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】Android應(yīng)用中onLoadFinished與onLoaderReset如何進行回調(diào)

這篇文章給大家介紹Android應(yīng)用中onLoadFinished與onLoaderReset如何進行回調(diào),內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

onLoadFinished與onLoaderReset回調(diào)這個方法是在前面已創(chuàng)建的加載器已經(jīng)完成其加載過程后被調(diào)用,這個方法保證會在應(yīng)用到加載器上的數(shù)據(jù)被釋放之前被調(diào)用。在此方法中,你必須刪除所有對舊數(shù)據(jù)的使用(因為它將很快會被刪除),但是不要自己去釋放它們,因為它們的加載器會做這些事情。加載器一旦了解到應(yīng)用不再使用數(shù)據(jù)時,將馬上釋放這些數(shù)據(jù)。例如,如果數(shù)據(jù)是一個從CursorLoader來的游標,你不應(yīng)調(diào)用游標的close(),如果游標被放置在一個CursorAdapter中,你應(yīng)使用swapCursor()方法,以使舊的游標不被關(guān)閉。例如://這個Adapter被用于顯示列表的數(shù)據(jù).

SimpleCursorAdapter

mAdapter;

...

public

void

onLoadFinished(Loader<Cursor>

loader,

Cursor

data)

{

//

Swap

the

new

cursor

in.

(The

framework

will

take

care

of

closing

the

//

old

cursor

once

we

return.)

mAdapter.swapCursor(data);

}onLoaderReset當(dāng)一個已創(chuàng)建的加載器被重置從而使其數(shù)據(jù)無效時,此方法被調(diào)用。此回調(diào)使你能發(fā)現(xiàn)什么時候數(shù)據(jù)將被釋放于是你可以釋放對它的引用。下面這個實現(xiàn)調(diào)用參數(shù)為null的swapCursor()://

這個Adapter被用于顯示列表的數(shù)據(jù)

SimpleCursorAdapter

mAdapter;

...

public

void

onLoaderReset(Loader<Cursor>

loader)

{

//此處是用于上面的onLoadFinished()的游標將被關(guān)閉時執(zhí)行,我們需確保我們不再使用它

mAdapter.swapCursor(null);

}例子作為一個例子,這里完整實現(xiàn)了一個Fragment顯示一個包含從聯(lián)系人contentprovider返回查詢數(shù)據(jù)的ListView的內(nèi)容的功能,它使用一個CursorLoader來管理對provider的查詢。public

static

class

CursorLoaderListFragment

extends

ListFragment

implements

OnQueryTextListener,

LoaderManager.LoaderCallbacks<Cursor>

{

//

這是用于顯示列表數(shù)據(jù)的Adapter

SimpleCursorAdapter

mAdapter;

//

如果非null,這是當(dāng)前的搜索過慮器

String

mCurFilter;

@Override

public

void

onActivityCreated(Bundle

savedInstanceState)

{

super.onActivityCreated(savedInstanceState);

//

如果列表中沒有數(shù)據(jù),就給控件一些文字去顯示.在一個真正的應(yīng)用

//

中這應(yīng)用資源中取得.

setEmptyText("No

phone

numbers");

//

我們在動作欄中有一個菜單項.

setHasOptionsMenu(true);

//

創(chuàng)建一個空的adapter,我們將用它顯示加載后的數(shù)據(jù)

mAdapter

=

new

SimpleCursorAdapter(getActivity(),

android.R.layout.simple_list_item_2,

null,

new

String[]

{

Contacts.DISPLAY_NAME,

Contacts.CONTACT_STATUS

},

new

int[]

{

android.R.id.text1,

android.R.id.text2

},

0);

setListAdapter(mAdapter);

//

準備loader.可能是重連到一個已存在的或開始一個新的

getLoaderManager().initLoader(0,

null,

this);

}

@Override

public

void

onCreateOptionsMenu(Menu

menu,

MenuInflater

inflater)

{

//

放置一個動作欄項用于搜索.

MenuItem

item

=

menu.add("Search");

item.setIcon(android.R.drawable.ic_menu_search);

item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

SearchView

sv

=

new

SearchView(getActivity());

sv.setOnQueryTextListener(this);

item.setActionView(sv);

}

public

boolean

onQueryTextChange(String

newText)

{

//

在動作欄上的搜索字串改變時被調(diào)用.更新

//搜索過濾器,并重啟loader來執(zhí)行一個新的查詢

mCurFilter

=

!TextUtils.isEmpty(newText)

?

newText

:

null;

getLoaderManager().restartLoader(0,

null,

this);

return

true;

}

@Override

public

boolean

onQueryTextSubmit(String

query)

{

//

我們不關(guān)心這個方法

return

true;

}

@Override

public

void

onListItemClick(ListView

l,

View

v,

int

position,

long

id)

{

//

寫入你想寫的代碼

Log.i("FragmentComplexList",

"Item

clicked:

"

+

id);

}

//

這是我們想獲取的聯(lián)系人中一行的數(shù)據(jù).

static

final

String[]

CONTACTS_SUMMARY_PROJECTION

=

new

String[]

{

Contacts._ID,

Contacts.DISPLAY_NAME,

Contacts.CONTACT_STATUS,

Contacts.CONTACT_PRESENCE,

Contacts.PHOTO_ID,

Contacts.LOOKUP_KEY,

};

public

Loader<Cursor>

onCreateLoader(int

id,

Bundle

args)

{

//

當(dāng)一個新的loader需被創(chuàng)建時調(diào)用.本例僅有一個Loader,

//所以我們不需關(guān)心ID.首先設(shè)置base

URI,URI指向的是聯(lián)系人

Uri

baseUri;

if

(mCurFilter

!=

null)

{

baseUri

=

Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,

Uri.encode(mCurFilter));

}

else

{

baseUri

=

Contacts.CONTENT_URI;

}

//

現(xiàn)在創(chuàng)建并返回一個CursorLoader,它將負責(zé)創(chuàng)建一個

//

Cursor用于顯示數(shù)據(jù)

String

select

=

"(("

+

Contacts.DISPLAY_NAME

+

"

NOTNULL)

AND

("

+

Contacts.HAS_PHONE_NUMBER

+

"=1)

AND

("

+

Contacts.DISPLAY_NAME

+

"

!=

''

))";

return

new

CursorLoader(getActivity(),

baseUri,

CONTACTS_SUMMARY_PROJECTION,

select,

null,

Contacts.DISPLAY_NAME

+

"

COLLATE

LOCALIZED

ASC");

}

public

void

onLoadFinished(Loader<Cursor>

loader,

Cursor

data)

{

//

將新的cursor換進來.(框架將在我們返回時關(guān)心一下舊cursor的關(guān)閉)

mAdapter.swapCursor(data);

}

public

void

onLoaderReset(Loader<Cursor>

loader)

{

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論