У меня есть ListView, который использует ArrayAdapter. Элементы в ArrayAdapter - это пользовательский объект, который я создал.
Я расширил этот пользовательский объект из Parcelable. Когда пользователь поворачивает экран и instanceState сохраняется, он записывает ArrayList в outState. Когда ListActivity воссоздается, instanceState считывается обратно в ArrayList. В onResume () я затем назначаю ArrayList переменной элементов ArrayAdapter, а затем вызываю setAdapter для ListView с ArrayAdapter.
К сожалению, в ListView ничего не отображается.
Я прошел отладку, и, кажется, все работает отлично, пока не вызывается setAdapter. ArrayList считывается обратно из instanceState, все данные там и прекрасно сохраняются.
Есть идеи?
Обновление:
Я исправил проблему. Я постараюсь написать объяснение здесь, пока stackoverflow не позволит мне создать ответ.
В onCreate () я создаю новый экземпляр моего ArrayList. Затем я передаю этот ArrayList новому экземпляру моего ArrayAdapter и вызываю setAdapter в ListView с этим ArrayAdapter. После onCreate () вызывается onRestoreInstanceState (). В onRestoreInstanceState () я по сути устанавливаю свой ArrayList в новый ArrayList (тот, который читается из InstanceState). Несмотря на то, что я затем указываю переменную item моего ArrayAdapter на этот новый ArrayList, кажется, что ArrayAdapter все еще указывает на старый пустой. Таким образом, ничего не отображается в списке. Я изменил onRestoreInstanceState, чтобы скопировать ArrayList, считанный из InstanceState, в уже объявленный ArrayList из onCreate ().