2012-06-26 2 views
-1

Можно создать дубликат:
Can't pass an ArrayList<Parcelable> to an activityNull получение Parcelable

вчера я получил эту работу, я сделал некоторые Реорганизация в кодекс и сейчас что-то не работает больше. Глядя на это уже давно, и я не могу найти проблему.

Я пропускание ArrayList из Parcelables к деятельности:

ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>(); 

//... 

Intent intent = new Intent(this, ChooseGiftDetailsActivity.class); 
intent.putParcelableArrayListExtra(Constants.FOO, myArrayListOfParcelables); 
startActivity(intent); 

Приемник:

ArrayList<Parcelable> parcelableList = (ArrayList<Parcelable>)getIntent().getParcelableArrayListExtra(Constants.FOO); 

parcelableList всегда пустой, хотя я посылаю один.

MyParcelable, конечно, расширяет Parcelable. Я уже опробовал проходящее один объект MyParcelable с помощью putExtra, он всегда работает:

Parcelable p = (Parcelable)getIntent().getExtras().getParcelable(Constants.BAR); 

или

MyParcelable p = (MyParcelable)getIntent().getExtras().getParcelable(Constants.BAR); 

Я положил некоторые отладочные сообщения в коде MyParcelable, я вижу, проходя список только методы Writting являются но он никогда не начинает считываться, и даже не выполняется createFromParcel. Что это?

+0

следовать этому TUT http://prasanta-paul.blogspot.com/2010/06/android-parcelable-example.html – Akram

+0

я сделал это, но он не работает – Ixx

+0

их, вы должны быть что-то отсутствует – Akram

ответ

0

Я предполагаю, что у вас есть СОЗДАТЕЛЬ, если нет, пожалуйста, создайте его. Тогда я хотел бы попробовать это так:

ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>(); 

//... 

Intent intent = new Intent(this, ChooseGiftDetailsActivity.class); 
intent.putIntExtra(Constants.FOO_COUNT, myArrayListOfParcelables.size()); 
MyParcelable p; 
for (int i = 0; i < myArrayListOfParcelables.size(); i++){ 
    p = myArrayListOfParcelables.get(i); 
    intent.putParcelableExtra(Constants.FOO + "_" + i, p); 
} 
startActivity(intent); 

затем снова читать так:

Intent intent = getIntent(); 
int cnt = intent.getIntExtra(Constants.FOO_COUNT); 
ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>(cnt); 
MyParcelable p; 
for (int i = 0; i < cnt; i++){ 
    p = (MyParcelable)intent.getParcelableExtra(Constants.FOO + "_" + i); 
    myArrayListOfParcelables.add(p); 
} 

Таким образом, у вас есть abillity, чтобы лучше видеть, что происходит под капотом. Может быть, Массив ваших Parcelables слишком велик, чтобы получить Parceled. Я попытался пропустить Bitmap и получить аналогичные проблемы.

+0

hm ... ОК, это будет следующая вещь, которую я попробую. – Ixx

Смежные вопросы