日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

4.Android loader详解___回调

發布時間:2025/7/14 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.Android loader详解___回调 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

onLoadFinished

這個方法是在前面已創建的裝載器已經完成其加載過程后被調用.這個方法保證會在應用到裝載器上的數據被釋放之前被調用.在此方法中,你必須刪除所有對舊數據的使用(因為它將很快會被刪除),但是不要自己去釋放它們,因為它們的裝載器會做這些事情.

裝載器一旦了解到應用不再使用數據時,將馬上釋放這些數據.例如,如果數據是一個從CursorLoader來的游標,你不應調用游標的close().如果游標被放置在一個CursorAdapter中,你應使用swapCursor()方法,以使舊的游標不被關閉.例如:

[java]?view plaincopy
  • //這個Adapter被用于顯示列表的數據.??
  • 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

    當一個已創建的裝載器被重置從而使其數據無效時,此方法被調用.此回調使你能發現什么時候數據將被釋放于是你可以釋放對它的引用.

    下面這個實現調用參數為nullswapCursor()

    [java]?view plaincopy
  • //?這個Adapter被用于顯示列表的數據.??
  • SimpleCursorAdapter?mAdapter;??
  • ...??
  • ??
  • public?void?onLoaderReset(Loader<Cursor>?loader)?{??
  • ????//此處是用于上面的onLoadFinished()的游標將被關閉時執行,?我們需確保我們不再使用它.??
  • ????mAdapter.swapCursor(null);??
  • }??

  • 例子

    作為一個例子,這里完整實現了一個Fragment顯示一個包含從聯系人contentprovider?返回查詢數據的ListView的內容的功能.它使用一個CursorLoader來管理對provider的查詢.


    為了能從用戶的聯系人中取得數據,本例的manifest必須包含READ_CONTACTS權限.

    [java]?view plaincopy
  • public?static?class?CursorLoaderListFragment?extends?ListFragment??
  • ????????implements?OnQueryTextListener,?LoaderManager.LoaderCallbacks<Cursor>?{??
  • ??
  • ????//?這是用于顯示列表數據的Adapter??
  • ????SimpleCursorAdapter?mAdapter;??
  • ??
  • ????//?如果非null,這是當前的搜索過慮器??
  • ????String?mCurFilter;??
  • ??
  • ????@Override?public?void?onActivityCreated(Bundle?savedInstanceState)?{??
  • ????????super.onActivityCreated(savedInstanceState);??
  • ??
  • ????????//?如果列表中沒有數據,就給控件一些文字去顯示.在一個真正的應用??
  • ????????//?中這應用資源中取得.??
  • ????????setEmptyText("No?phone?numbers");??
  • ??
  • ????????//?我們在動作欄中有一個菜單項.??
  • ????????setHasOptionsMenu(true);??
  • ??
  • ????????//?創建一個空的adapter,我們將用它顯示加載后的數據??
  • ????????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)?{??
  • ????????//?在動作欄上的搜索字串改變時被調用.更新??
  • ????????//搜索過濾器,并重啟loader來執行一個新的查詢??
  • ????????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)?{??
  • ????????//?當一個新的loader需被創建時調用.本例僅有一個Loader,??
  • ????????//所以我們不需關心ID.首先設置base?URI,URI指向的是聯系人??
  • ????????Uri?baseUri;??
  • ????????if?(mCurFilter?!=?null)?{??
  • ????????????baseUri?=?Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,??
  • ????????????????????Uri.encode(mCurFilter));??
  • ????????}?else?{??
  • ????????????baseUri?=?Contacts.CONTENT_URI;??
  • ????????}??
  • ??
  • ????????//?現在創建并返回一個CursorLoader,它將負責創建一個??
  • ????????//?Cursor用于顯示數據??
  • ????????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換進來.(框架將在我們返回時關心一下舊cursor的關閉)??
  • ????????mAdapter.swapCursor(data);??
  • ????}??
  • ??
  • ????public?void?onLoaderReset(Loader<Cursor>?loader)?{??
  • ????????//在最后一個Cursor準備進入上面的onLoadFinished()之前.??
  • ????????//?Cursor要被關閉了,我們需要確保不再使用它.??
  • ????????mAdapter.swapCursor(null);??
  • ????}??
  • }??





  • 來自為知筆記(Wiz)

    轉載于:https://www.cnblogs.com/ywq-come/p/5925302.html

    總結

    以上是生活随笔為你收集整理的4.Android loader详解___回调的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。