2010-11-15 2 views
7

Ho letto post su array di passaggio da e ad attività, ma sono confuso su come lo farei per il mio caso specifico.Come si passa un array di oggetti a un'attività?

Ho una matrice di oggetti denominata DaysWeather (una matrice DaysWeather []) in cui gli oggetti hanno diversi attributi String e un attributo bitmap. Ho letto da qualche parte che devi renderlo serializzabile o parzeable o qualcosa del genere, ma a prima vista sembra disordinato.

Qualcuno potrebbe guidarmi nella giusta direzione?

C'è un modo semplice per farlo?

risposta

5

Gli oggetti devono implementare lo Parcelable interface.

Una volta fatto questo, è possibile creare l'array Parcelable e passarlo all'attività:

// We assume we have an array: DaysWeather[] input; 
Parcelable[] output = new Parcelable[input.length]; 
for (int i=input.length-1; i>=0; --i) { 
    output[i] = input[i]; 
} 

Intent i = new Intent(...); 
i.putExtra("myArray", output); 

Si noti inoltre che quando si implementa l'interfaccia Parcelable, non serializzare pieni di oggetti pesanti. Ad esempio, per la tua bitmap, serializza solo l'ID ressource e quando si gonfia, ricrea la bitmap dall'ID ressource.

+0

Ma non farlo. Utilizzare altri metodi per trasferire oggetti come un servizio. – Falmarri

+0

Un altro modo per passare oggetti tra le attività consiste nell'utilizzare provider di contenuti, ricevitori broadcast e filtri intent. (http://thinkandroid.wordpress.com/2010/02/02/custom-intents-and-broadcasting-with-receivers/) –

+1

Non so cosa intendi quando dici "non serializzare oggetti pesanti completi. " Le mie bitmap non hanno ID di risorsa poiché vengono scaricate dal Web direttamente nei rispettivi oggetti contenitore. Inoltre, puoi indirizzarmi a un tutorial/esempio di implementazione di Parcelable? I miei oggetti (DaysWeather) sono semplicemente strutture di dati contenenti 5 stringhe e una bitmap. Non sono esattamente sicuro di come implementare il metodo writeToParcel() con questi dati. – joepetrakovich