0

アプリケーションで 4 つのローダーを使用して、リストビューにデータをロードしています。向きを変更すると、ローダー マネージャーは常に最初のローダーをロードしようとします。この問題を解決するために、アプリケーションの「onResume」でローダーを再起動しています。これで、リストビューにデータが取り込まれましたが、向きが変更される前のリストの位置は維持されません。方向の変更時にローダーの状態を維持する方法はありますか?

4

1 に答える 1

1

リストの再読み込みを防ぐことができない場合は、少なくとも位置を復元できます。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (null != savedInstanceState) {
        mViewPosition = savedInstanceState.getInt(KEY_LIST_CUR_POS);
        mViewOffset = savedInstanceState.getInt(KEY_LIST_VIEW_OFFSET);
    } 
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.status_list, container, false);
    return(view);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // Restore list position.
    getListView().setSelectionFromTop(mViewPosition, mViewOffset);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // Save current view in list.
    outState.putInt(KEY_LIST_CUR_POS, mViewPosition);
    outState.putInt(KEY_LIST_VIEW_OFFSET, mViewOffset);
}

@Override
public void onPause() {
    super.onPause();

    mViewPosition = getListView().getFirstVisiblePosition();
    View v = getListView().getChildAt(0);
    mViewOffset = (v == null) ? 0 : v.getTop();
}
于 2012-08-15T15:36:55.280 に答える