SimpleCursorAdapter的onRestoreInstanceState

时间:2012-10-01 12:55:40

标签: android listview android-cursoradapter screen-rotation

如何保存/恢复附加到ListView的{​​{1}}状态?例如:

我有一个Android CursorAdapter,其中包含3个Activity:国家,地区,城市。

它们附加到3 ListViewSimpleCursorApdaterCountryAdapterRegionAdapter

  • 选择国家/地区列表中的项目将通过更改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()为空,因为尚未终止2 cityListView个方法。所以我不能直截了当:

runQuery()

问题: 如何使用void onRestoreInstanceState(Bundle state) { ... savedCitySelection = state.getInt("citySelectedItemPosition") cityListView.setSelection(savedCitySelection); // <= NOOO! the cityListView is empty } onSaveInstanceState()

保存/恢复这3个列表的状态

1 个答案:

答案 0 :(得分:1)

我建议使用Loader

然后当加载完成并且您将光标交换进来时,您可以在smoothScrollToPosition(int position)上拨打ListView *。

CommonsWare在这里有一个很好的基于支持库的CursorLoader:

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

* (注意:smoothScrollToPosition需要Android 2.2)