生活随笔
收集整理的這篇文章主要介紹了
4.Android loader详解___回调
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
onLoadFinished
這個方法是在前面已創(chuàng)建的裝載器已經(jīng)完成其加載過程后被調(diào)用.這個方法保證會在應(yīng)用到裝載器上的數(shù)據(jù)被釋放之前被調(diào)用.在此方法中,你必須刪除所有對舊數(shù)據(jù)的使用(因為它將很快會被刪除),但是不要自己去釋放它們,因為它們的裝載器會做這些事情.
裝載器一旦了解到應(yīng)用不再使用數(shù)據(jù)時,將馬上釋放這些數(shù)據(jù).例如,如果數(shù)據(jù)是一個從CursorLoader來的游標(biāo),你不應(yīng)調(diào)用游標(biāo)的close().如果游標(biāo)被放置在一個CursorAdapter中,你應(yīng)使用swapCursor()方法,以使舊的游標(biāo)不被關(guān)閉.例如:
[java]?view plaincopy
??SimpleCursorAdapter?mAdapter;??...????public?void?onLoadFinished(Loader<Cursor>?loader,?Cursor?data)?{??????????????????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():
[java]?view plaincopy
??SimpleCursorAdapter?mAdapter;??...????public?void?onLoaderReset(Loader<Cursor>?loader)?{????????????mAdapter.swapCursor(null);??}??例子
作為一個例子,這里完整實現(xiàn)了一個Fragment顯示一個包含從聯(lián)系人contentprovider?返回查詢數(shù)據(jù)的ListView的內(nèi)容的功能.它使用一個CursorLoader來管理對provider的查詢.
為了能從用戶的聯(lián)系人中取得數(shù)據(jù),本例的manifest必須包含READ_CONTACTS權(quán)限.
[java]?view plaincopy
public?static?class?CursorLoaderListFragment?extends?ListFragment??????????implements?OnQueryTextListener,?LoaderManager.LoaderCallbacks<Cursor>?{??????????????SimpleCursorAdapter?mAdapter;??????????????String?mCurFilter;????????@Override?public?void?onActivityCreated(Bundle?savedInstanceState)?{??????????super.onActivityCreated(savedInstanceState);????????????????????????????????setEmptyText("No?phone?numbers");??????????????????????setHasOptionsMenu(true);??????????????????????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);??????????????????????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)?{??????????????????????????????mCurFilter?=?!TextUtils.isEmpty(newText)???newText?:?null;??????????getLoaderManager().restartLoader(0,?null,?this);??????????return?true;??????}????????@Override?public?boolean?onQueryTextSubmit(String?query)?{????????????????????return?true;??????}????????@Override?public?void?onListItemClick(ListView?l,?View?v,?int?position,?long?id)?{????????????????????Log.i("FragmentComplexList",?"Item?clicked:?"?+?id);??????}??????????????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)?{??????????????????????????????Uri?baseUri;??????????if?(mCurFilter?!=?null)?{??????????????baseUri?=?Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,??????????????????????Uri.encode(mCurFilter));??????????}?else?{??????????????baseUri?=?Contacts.CONTENT_URI;??????????}????????????????????????????????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)?{????????????????????mAdapter.swapCursor(data);??????}????????public?void?onLoaderReset(Loader<Cursor>?loader)?{??????????????????????????????mAdapter.swapCursor(null);??????}??}??
來自為知筆記(Wiz)
轉(zhuǎn)載于:https://www.cnblogs.com/ywq-come/p/5925302.html
總結(jié)
以上是生活随笔為你收集整理的4.Android loader详解___回调的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。