2012-10-01 2 views
1

CursorAdapter에 연결된 ListView의 상태를 저장/복원하는 방법은 무엇입니까? 예 :SimpleCursorApdater의 onRestoreInstanceState

저는 Activity과 3 ListView 인 국가, 지역, 도시가 있습니다.

이들은 3 개의 숫자에 붙어있다. CountryAdapter, RegionAdapter, CityAdapter.

  • RegionAdapter
  • 의 쿼리 조건을 변경하여 지역 목록의 항목을 필터링 할 국가 목록에서 항목을 선택의 쿼리 조건을 변경하여 도시 목록의 항목을 필터링 할 지역 목록에서 항목을 선택 CityAdapter

의사 코드 :

void countryList_onItemSelected() { 
    regionsAdapter.getFilter().filter(countryId); 
} 
void regionList_onItemSelected() { 
    cityAdapter.getFilter().filter(regionId); 
} 

Cursor regionAdapter_FilterQueryProvider_runQuery(countryId) { 
    Cursor cur = dbHelper.getReadableDatabase(). 
      query("Select * from Region where countryId = "+countryId); 
    return cur; 
} 

Cursor cityAdapter_FilterQueryProvider_runQuery(regionId) { 
    Cursor cur = dbHelper.getReadableDatabase(). 
      query("select * from City where regionId = "+regionId); 
    return cur; 
} 

onRestoreInstanceState()가 호출되면, 메서드가 아직 종료되지 않았으므로은 비어 있습니다. 그래서 나는 바로 갈 수

void onRestoreInstanceState(Bundle state) { 
    ... 
    savedCitySelection = state.getInt("citySelectedItemPosition") 
    cityListView.setSelection(savedCitySelection); // <= NOOO! the cityListView is empty 
} 

질문 : 가 어떻게 저장/나는 Loader을 사용하는 것이 좋습니다 것 onSaveInstanceState()onRestoreInstanceState().

답변

1

이러한 3 개 목록의 상태를 복원 할 수 있습니다.

로드가 완료되고 커서를 바꿔 넣으면 ListViewsmoothScrollToPosition(int position) *을 호출 할 수 있습니다.

CommonsWare 여기에 지원 라이브러리를 기반으로 좋은 CursorLoader 있습니다

https://github.com/commonsguy/cwac-loaderex

* 는 :

(주 smoothScrollToPosition는 안드로이드 2.2 필요)
관련 문제