1

假设我有一个PreferenceActivity(出于兼容性原因,我无法将其转换为使用 Fragments)。其中的一项设置PreferenceActivity是针对当前应用程序主题,我想通过调用PreferenceActivity#recreate()强制重新创建活动(使用新主题)更改首选项时立即应用该主题。

不幸的是,该活动包含太多设置,可能需要滚动。重新创建活动后,我想恢复之前的滚动位置,以允许从一个主题无缝过渡到另一个主题。

但是,尝试使用in保留嵌入ListView的滚动位置总是返回零。getListView().getScrollY()onSaveInstanceState

有什么方法可以获取PreferenceActivity列表滚动位置并在以后恢复它?

4

1 回答 1

2

首先,您需要获得 2 个值:

final int firstVisibleItem = getListView().getFirstVisiblePosition();
final int firstVisibleItemTop = getListView().getChildAt(0).getTop();

然后将它们保存到一些存储中(首选项或意图的 budle 或其他地方)。要从这些值恢复滚动位置:

final ListView listView = getListView();
listView.setSelection(firstVisibleItem);
listView.smoothScrollBy(-firstVisibleItemTop, 0);
于 2013-12-01T12:29:29.930 回答