2014-11-02 29 views
8

È possibile restituire l'oggetto come risultato dell'attività dall'attività figlio a padre? Proprio qualcosa come:Oggetto restituito Android come risultato di attività

Intent resultIntent = new Intent(null); 
resultIntent.putExtra("STRING_GOES_HERE", myObject); 
setResult(resultIntent); 
finish(); 

Se è possibile, come devo recuperare myObject nell'attività genitore?

ho capito, che per recuperare i dati che ho bisogno di fare qualcosa di simile:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQ_CODE_CHILD) { 
     MyClass myObject = data.getExtra("STRING_GOES_HERE"); 
    } 
} 

Cosa è che ottengo l'errore, che non può risolvere il metodo 'getExtra' ....

+0

Informazioni sulla serializzazione Java. – Simon

+0

Hmmm ... Il problema è che 'startActivityForResult (Intent, int)' Non posso passare l'oggetto al posto del numero intero in un primo momento ... –

risposta

12

Non è possibile restituire un oggetto, ma è possibile restituire un intent contenente i propri oggetti (a condizione che siano tipi primitivi, Serializable o Parcelable).

Nella vostra attività del bambino, il codice sarà qualcosa del tipo:

int resultCode = ...; 
Intent resultIntent = new Intent(null); 
resultIntent.putExtra("STRING_GOES_HERE", myObject); 
setResult(resultCode, resultIntent); 
finish(); 

Nella vostra attività genitore è necessario avviare l'attività bambino con startActivityForResult:

public final static int REQ_CODE_CHILD = 1; 

... 
Intent child = new Intent(getPackageName(), "com.something.myapp.ChildActivity"); 
startActivityForResult(child, REQ_CODE_CHILD); 

e poi in onActivityResult, avrai:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQ_CODE_CHILD) { 
     MyClass myObject = data.getExtras().getSerializable("STRING_GOES_HERE"); 
    } 

    ... 
} 

È possibile leggere un i metodi su Activity javadoc page.

+0

Metodo di risoluzione di Canot 'getExtra'? Perché? –

+0

Scusa, non ho pensato bene. È necessario recuperare il pacchetto e quindi singoli extra. Ho aggiornato la mia risposta (basata sul presupposto che il tuo oggetto sia serializzabile) –

+0

La tua classe 'MyClass' deve' implementare Serializable' affinché funzioni. – Zapnologica

3

Controlla this answer, che spiega come utilizzare startActivityForResult e onActivityResult.

Questo stesso processo può essere utilizzato per qualsiasi oggetto che sia Serializable o Parcelable. Pertanto, se myObject è una classe personalizzata che hai creato, dovrai implementare una di queste interfacce.

-1

È possibile utilizzare setResult (int) leggere android activity reference, in particolare avviare le attività e ottenere risultati.

Problemi correlati