Android onLoadFinished 와 onLoaderReset 리 셋 상세 설명 및 인 스 턴 스

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); 
  } 
} 
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기