Android onLoadFinished 와 onLoaderReset 리 셋 상세 설명 및 인 스 턴 스
onLoadFinished
이 방법 은 앞에서 만 든 로 더 가 로 딩 과정 을 마 친 후에 호출 되 는 것 입 니 다.이 방법 은 로 더 에 응 용 된 데이터 가 풀 리 기 전에 호출 될 것 을 보장 합 니 다.이 방법 에 서 는 오래된 데이터 에 대한 모든 사용 을 삭제 해 야 합 니 다.(곧 삭 제 될 것 이기 때 문 입 니 다.)하지만 직접 풀 어 주지 마 십시오.로 더 가 이런 일 을 할 수 있 기 때 문 입 니 다.
로 더 는 응용 이 더 이상 데 이 터 를 사용 하지 않 는 다 는 것 을 알 게 되면 바로 이 데 이 터 를 방출 합 니 다.예 를 들 어 데이터 가 CursorLoader 에서 온 커서 라면 커서 의 close()를 호출 해 서 는 안 됩 니 다.커서 가 CursorAdapter 에 놓 여 있 으 면 swapCursor()방법 을 사용 하여 오래된 커서 가 닫 히 지 않도록 해 야 합 니 다.예 를 들 면:
// 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만 든 로 더 가 초기 화 되 어 데이터 가 잘못 되 었 을 때 이 방법 이 호출 됩 니 다.이 반전 은 데이터 가 언제 풀 릴 지 알 수 있 기 때문에 인용 을 풀 수 있 습 니 다.
다음은 null 인 자 를 호출 하 는 swapCursor()입 니 다.
// Adapter
SimpleCursorAdapter mAdapter;
...
public void onLoaderReset(Loader<Cursor> loader) {
// onLoadFinished() ,
mAdapter.swapCursor(null);
}
예시예 를 들 어 연락처 contentprovider 에서 데 이 터 를 조회 하 는 ListView 의 내용 을 보 여 주 는 Fragment 기능 을 완 벽 히 구현 하 였 습 니 다.cursorLoader 를 사용 하여 provider 에 대한 조 회 를 관리 합 니 다.
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);
}
}
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.