У меня возникают проблемы с методом ListView setSelection. Я пытаюсь, чтобы мой список отображался при одном и том же индексе при переключении между пейзажной и портретной ориентацией. Тем не менее, каждый раз, когда я вращаюсь и активность воссоздается, список начинается сверху. Код, который я использую, выглядит следующим образом:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
ArrayList<Integer> indices = new ArrayList<Integer>();
for (Integer i : f_checkedMessages) {
indices.add(i);
}
savedInstanceState.putIntegerArrayList("CheckedMessageIndices", indices);
savedInstanceState.putInt("ListIndex", f_listView.getFirstVisiblePosition());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
ArrayList<Integer> indices = savedInstanceState.getIntegerArrayList("CheckedMessageIndices");
for (Integer i : indices) {
f_checkedMessages.add(i);
}
int listIndex = savedInstanceState.getInt("ListIndex");
f_listView.setSelection(listIndex);
}
Я использовал отладчик для проверки правильности значения listIndex. Следует также отметить, что элементы с проверенным списком сохраняются при изменении ориентации. Я знаю, что setSelected выбирает только элемент listview в режиме touch, но в документации говорится, что этот метод выравнивает список, независимо от того, находится ли он в режиме касания или нет.
Кто-нибудь знает, почему это не работает, или если есть лучший способ сделать это?
Спасибо, ваша помощь очень ценится!