Передача ArrayList между намерениями теряет данные - PullRequest
0 голосов
/ 21 апреля 2011

Я передаю ArrayList<Custom implements Parcelable> myList Намерению.Кажется, что оба следующих способа работают нормально с добавлением ArrayList в новый Intent.

        results.putParcelableArrayListExtra("list", myList);
        results.putExtra("list", myList);

Когда я проверяю mIntent / mExtras / mMap / table, все это есть.Но в методе onCreate намерения некоторые из этих данных, похоже, теряются.Затем я получаю ArrayList с myList = (ArrayList<Custom>) this.getIntent().getParcelableArrayListExtra("list");

Например, список содержит пять элементов [a], [b], [c], [d] и [e]:

put...   get...
[a]  ->  [a]
[b]  ->  null
[c]  ->  [b]
[d]  ->  null
[e]  ->  [c]

Кажется, что каждый второй элемент в новом списке не предназначен и занимает одно место, которое отсутствует в конце.Можете ли вы сказать мне, что я делаю не так?

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

попробуйте это, мой друг:

intent.putParcelableArrayListExtra("tag",yourObjectImplementsParceable);

xxx = (ArrayList<yourClassImplementsParceable>) intent.getParcelableArrayListExtra("tag");

надеюсь, это поможет

1 голос
/ 22 июля 2018

Вместо того чтобы писать реализацию Parcelable самостоятельно, попробуйте использовать автозавершение кода Android Studio (в Windows: Alt + Enter после того, как вы напишите «Implements Parcelable» и снова для имени класса CustomObject).Это предотвращает общие ошибки в реализации.

Тем не менее, будьте осторожны: если вы реализуете Parcelable и добавляете / удаляете переменные объекта в CustomObject впоследствии, реализация Parcelable больше не будет действительной.

В этом случае вы можете вручную добавить недостающие детали в методы Parcelable, но я предпочитаю удалять их и заставлять Android Studio снова их реализовывать (обязательно удалите ВСЕ реализованные методы Parcelable в CustomObject, так как Android Studio победила 't обновить методы Parcelable, которые уже существуют).

Я столкнулся с той же ошибкой, о которой вы писали, и после правильной повторной реализации Parcelable в CustomObject (я несколько раз менял ее с тех пор, как в последний раз реализовал Parcelable)все работало нормально.

1 голос
/ 21 апреля 2011

Попробуйте получить массив с помощью

getIntent().getExtras().getParcelableArrayList(yourArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...