Android onLoadFinishedとonLoaderResetコールバックの詳細と例
5189 ワード
Android onLoadFinishedとonLoaderResetコールバックの詳細と例
onLoadFinished
この方法は、前に作成したローダがロードプロセスを完了した後に呼び出され、ローダに適用されたデータが解放される前に呼び出されることを保証する.この方法では、古いデータの使用をすべて削除する必要があります(すぐに削除されるので)、ローダがこれらのことをするので、自分で解放しないでください.
ローダは、アプリケーションがデータを使用しないことを認識すると、すぐにデータを解放します.たとえば、データがCursorLoaderからのカーソルの場合は、カーソルのclose()を呼び出すべきではありません.カーソルがCursorAdapterに配置されている場合は、古いカーソルを閉じないようにswapCursor()メソッドを使用します.例:
onLoaderReset
作成したローダがリセットされ、データが無効になった場合、このメソッドが呼び出されます.このコールバックは、データがいつ解放されるかを発見し、参照を解放することができます.
次の実装呼び出しパラメータはnullのswapCursor()です.
例
一例として、ここでは、連絡先contentproviderからクエリーデータを返すListViewを含むコンテンツをFragmentが表示する機能を完全に実現し、cursorLoaderを使用してproviderに対するクエリーを管理する.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
onLoadFinished
この方法は、前に作成したローダがロードプロセスを完了した後に呼び出され、ローダに適用されたデータが解放される前に呼び出されることを保証する.この方法では、古いデータの使用をすべて削除する必要があります(すぐに削除されるので)、ローダがこれらのことをするので、自分で解放しないでください.
ローダは、アプリケーションがデータを使用しないことを認識すると、すぐにデータを解放します.たとえば、データがCursorLoaderからのカーソルの場合は、カーソルのclose()を呼び出すべきではありません.カーソルがCursorAdapterに配置されている場合は、古いカーソルを閉じないようにswapCursor()メソッドを使用します.例:
// Adapter .
SimpleCursorAdapter mAdapter;
...
public void onLoadFinished(Loader 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
作成したローダがリセットされ、データが無効になった場合、このメソッドが呼び出されます.このコールバックは、データがいつ解放されるかを発見し、参照を解放することができます.
次の実装呼び出しパラメータはnullのswapCursor()です.
// Adapter
SimpleCursorAdapter mAdapter;
...
public void onLoaderReset(Loader loader) {
// onLoadFinished() ,
mAdapter.swapCursor(null);
}
例
一例として、ここでは、連絡先contentproviderからクエリーデータを返すListViewを含むコンテンツをFragmentが表示する機能を完全に実現し、cursorLoaderを使用してproviderに対するクエリーを管理する.
public static class CursorLoaderListFragment extends ListFragment
implements OnQueryTextListener, LoaderManager.LoaderCallbacks {
// 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 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 loader, Cursor data) {
// cursor .( cursor )
mAdapter.swapCursor(data);
}
public void onLoaderReset(Loader loader) {
// Cursor onLoadFinished() .
// Cursor , .
mAdapter.swapCursor(null);
}
}
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!