在调用中保留PreferenceActivity的滚动位置

时间:2012-11-29 22:54:46

标签: android

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

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

请注意使用ListView中的getListView().getScrollY()保留嵌入的onSaveInstanceState滚动位置,但始终返回零。

有没有办法获取PreferenceActivity的列表滚动位置并稍后恢复?

1 个答案:

答案 0 :(得分:2)

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

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

然后将它们保存到一些存储空间(Preferences或Intent的萌芽或其他地方)。要从这些值恢复滚动位置:

final ListView listView = getListView();
listView.setSelection(firstVisibleItem);
listView.smoothScrollBy(-firstVisibleItemTop, 0);