android - SimpleCursorAdapter 的 onRestoreInstanceState

标签 android listview android-cursoradapter screen-rotation

如何保存/恢复附加到 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/

相关文章:

java - Android - 使用 webView 将 url 从 Activity 1 发送到 Activity 2

java - 数据库错误: "NullPointerException: Attempt to invoke virtual method getApplicationInfo()... on a null object reference"

android - 在 CursorAdapter 中使用 String 作为 _id

android - 具有不同行布局的光标适配器

使用 Wallpaper Manager 的 Android AsyncTask

android - 自定义 Cordova CordovaWebViewClient 上的 shouldOverrideUrlLoading 不再工作

android - 离线时运行 flutter - 卡在 Resolving Dependencies

android - 我的 Android Listview 适配器中的 IndexOutOfBoundsException

java - 使用SearchView到ListView进行搜索(关于JSON)

android - 光标适配器和列表适配器的拖放排序