1

如何保存/恢复ListView附加到的状态CursorAdapter?例子:

我有一个Activity带有 3的 Android 设备ListView:国家、地区、城市。

它们连接到 3 SimpleCursorApdater: CountryAdapter, RegionAdapter, CityAdapter

  • 选择国家列表中的项目将通过更改查询条件过滤地区列表的项目RegionAdapter
  • 在 Regions List 中选择一个 item 将通过更改 Cities List 的查询条件来过滤 Cities List 中的项目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
}

问题:如何使用 和 保存/恢复这 3 个列表的onSaveInstanceState()状态onRestoreInstanceState().

4

1 回答 1

1

我建议使用Loader.

然后,当加载完成并交换光标时,您可以smoothScrollToPosition(int position)ListView.

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

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

* (注:smoothScrollToPosition 需要 Android 2.2)

于 2012-10-11T03:20:54.870 回答