如何保存/恢复附加到ListView的CursorAdapter状态?示例:
我有一个安卓Activity,3 ListView:国家,地区,城市。
它们附在3SimpleCursorApdater上: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()时,cityListView是空的,因为两个runQuery()方法尚未终止。所以我不能直走:
void onRestoreInstanceState(Bundle state) {
...
savedCitySelection = state.getInt("citySelectedItemPosition")
cityListView.setSelection(savedCitySelection); // <= NOOO! the cityListView is empty
}onSaveInstanceState()问题:如何使用和 onRestoreInstanceState().保存/恢复这3个列表的状态
发布于 2012-10-11 03:20:54
我建议使用Loader。
然后,当加载完成并交换游标时,您可以在ListView上调用ListView*。
CommonsWare基于这里的支持库有一个很好的CursorLoader:
https://github.com/commonsguy/cwac-loaderex
*(注: smoothScrollToPosition需要Android2.2)
https://stackoverflow.com/questions/12673712
复制相似问题