Переполнение списка из Parcelable ArrayList - PullRequest
2 голосов
/ 18 июля 2011

У меня есть 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 ().

1 Ответ

0 голосов
/ 23 августа 2011

В onCreate () я создаю новый экземпляр моего ArrayList.Затем я передаю этот ArrayList новому экземпляру моего ArrayAdapter и вызываю setAdapter в ListView с этим ArrayAdapter.После onCreate () вызывается onRestoreInstanceState ().В onRestoreInstanceState () я по сути устанавливаю свой ArrayList в новый ArrayList (тот, который читается из InstanceState).Несмотря на то, что я затем указываю переменную item моего ArrayAdapter на этот новый ArrayList, кажется, что ArrayAdapter все еще указывает на старый пустой.Таким образом, ничего не отображается в списке.Я изменил onRestoreInstanceState, чтобы скопировать ArrayList, считанный из InstanceState, в уже объявленный ArrayList из onCreate ().

...