gpt4 book ai didi

android - SimpleCursorAdapter 的 onRestoreInstanceState

转载 作者:行者123 更新时间:2023-11-30 03:59:51 26 4
gpt4 key购买 nike

如何保存/恢复附加到 CursorAdapterListView 的状态?示例:

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

它们附加到 3 个 SimpleCursorApdater:CountryAdapterRegionAdapterCityAdapter

  • 选择国家列表中的项目将通过更改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() 保存/恢复这 3 个列表的状态。

最佳答案

我建议使用 Loader

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

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

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

*(注意:smoothScrollToPosition 需要 Android 2.2)

关于android - SimpleCursorAdapter 的 onRestoreInstanceState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12673712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com