当多个加载器与loader manager一起使用时,android不会在方向更改时维护正确的加载器状态

时间:2012-08-15 14:54:11

标签: android android-loadermanager

我在我的应用程序中使用4个加载器将数据加载到listview中。当我更改方向时,加载程序管理器总是尝试加载第一个加载程序。为了解决这个问题,我在应用程序的“onResume”中重新启动加载程序。现在列表视图中填充了数据,但是在未维护方向更改之前列表的位置。有没有办法在方向改变时保持加载器状态?

1 个答案:

答案 0 :(得分: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();
}