1

ListViewに接続されている状態を保存/復元する方法はCursorAdapter? 例:

国、地域、都市のActivity3 つの Android があります。ListView

、、 の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()呼び出されると、 2 つのメソッドがまだ終了していないcityListViewため、 は空です。runQuery()だから私はまっすぐに行くことができません:

void onRestoreInstanceState(Bundle state) {
    ...
    savedCitySelection = state.getInt("citySelectedItemPosition")
    cityListView.setSelection(savedCitySelection); // <= NOOO! the cityListView is empty
}

onSaveInstanceState()質問: これら 3 つのリストの状態をおよびで保存/復元するにはどうすればよいですか?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 に答える