2012-10-01 33 views
1

如何保存/恢復ListView的狀態,它附加到CursorAdapter?例如:onRestoreInstanceState SimpleCursorApdater

我有一個Android Activity與3 ListView:國家,地區,城市。

它們連接到3 SimpleCursorApdaterCountryAdapter,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()被調用時,cityListView是空的,因爲2 runQuery()方法尚未終止。因此,我可以走直線:

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

問: 我如何保存/與onSaveInstanceState()onRestoreInstanceState().

回答

1

恢復這些3所列出的狀態,我會用Loader建議。

然後,當加載完成後,您可以調用光標smoothScrollToPosition(int position) * ListView

CommonsWare具有基於支持庫有好的CursorLoader:

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

* (注:smoothScrollToPosition需要的Android 2.2)

相關問題