2012-06-25 15 views
5

Questo è il codicenon può passare un ArrayList <Parcelable> ad un'attività

ArrayList<MyObject> list = new ArrayList<MyObject>(); 
list.add(new MyObject()); 
Intent intent = new Intent(this, ReceiverActivity.class); 
intent.putExtra("list", list); 
startActivity(intent); 

ReceiverActivity

List<MyObject> list = (List<MyObject>)getIntent().getExtras().getParcelable("list"); 

Ecco la lista è nullo. Anche questo non funziona:

List<MyObject> list = (List<MyObject>)getIntent().getExtras().getSerializable("list"); 

MyObject è Parcelable, ho implementato tutti i metodi richiesti. Immagino che questa implementazione non sia il problema, perché altrimenti riceverei altri tipi di eccezioni. Ma non ottengo nulla oltre alla lista è nullo.

Grazie in anticipo ...

Ora ho trovato questo:

List<Parcelable> list = (List<Parcelable>)getIntent().getParcelableArrayListExtra("list"); 

che deve essere utilizzato nell'attività ricevente, ma come faccio a inviare e come faccio ad avere List<MyObject> da List<Parcelable> ?

risposta

15

USe i.putParcelableArrayListExtra(name, value) dove sono il vostro intento. Non utilizzare putExtra() per un ArrayList parcelable.

+0

Il metodo getParcelableArrayListExtra mi dà ArrayList Come faccio ad avere ArrayList ? Sembra che devo lanciare sugli elementi, o creare un'istanza di una nuova copia con tipo ArrayList ? – Ixx

+0

i tuoi oggetti devono essere implementati Parcelable. Quindi dovrebbero andare bene – Akhil

+0

Non è possibile lanciarli perché sono in una lista e i generici non sono covarianti. – Ixx

6

Prova:

ArrayList<MyObject> myList = extras.<MyObject>getParcelableArrayList("list")); 
+0

Proprio come una nota a margine. Per l'intento stesso è intent.getParcelableArrayListExtra ("nome") –

Problemi correlati