这是一段代码,其中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
并正确恢复滚动状态。