在onStop / onRestart状态更改后,带有页脚和cursorAdapter的ListView不会保存滚动位置

时间:2012-07-30 14:15:05

标签: java android listview android-cursoradapter

这是一段代码,其中listView的所有初始化都发生了:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    simpleListView = (ListView) findViewById(R.id.main_activity_listview_simple);
    simpleListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            startAnotherActivity();
        }
    });

    View footerView = getFooterView();
    simpleListView.addFooterView(footerView);

    Cursor cursor = getSimpleCursor();
    startManagingCursor(cursor);

    simpleListView.setAdapter(new SimpleCursorAdapter(this, cursor, ...);
}

当我点击ListView项时,它会启动新的Activity所以 onSaveInstanceState(),onPause(),onStop()方法将被调用。我在super.onStop()之后检查了调试器ListView.mFirstPosition ,其值为&gt; 0(因为我滚动到列表的底部)。

然后将实例化新的Activity并开始其生命周期。当我回击键时,此活动将被销毁并且我的上一个。 ListView的活动到达前台(因此将调用其 onRestart(),onStart(),onResume()。我在super.onRestart()之前检查了调试器ListView.mFirstPosition ,其值为0.滚动位置现在指向我ListView的第一项(现在我在顶部)。

我在Android 2.2 - 4.0上试过这个。它可以在4.0上运行,但在其他情况下则不行(仅在仿真器上试用.SDK Tools修订版20)。

我知道startManagingCursor()我的光标会deactivate() / requery(),但如果ListView没有页脚项,则会正确保存滚动状态

问题是“这是一个错误还是我做错了什么?”。我不想明确保存它的状态。只是想了解为什么会出现这种情况。

更新08.01:

如果Activity ListView被销毁,系统会重新创建Activity并正确恢复滚动状态。

0 个答案:

没有答案