2011-08-08 10 views
10

Mi chiedo se sto capendo correttamente i concetti di requestCode e resultCode? Fondamentalmente, ho un intero arbitrario (il codice di richiesta) associato a un'attività. Ad esempio, nel Notepad tutorial, abbiamoAndroid: requestCode e resultCode

private static final int ACTIVITY_CREATE=0; 
private static final int ACTIVITY_EDIT=1; 

Abbiamo quindi utilizzare startSubActivity (intento, requestCode) per avviare un'attività, ad esempio l'attività "crea nota". Facciamo qualcosa in quell'attività e restituiamo un risultatoCode.

Nell'attività padre rileviamo il resultCode con onActivityResult (requestCode, resultCode, intent). Possiamo quindi utilizzare il codice request per vedere quale attività viene restituita, il resultCode per vedere il risultato di tale attività e gli "extra" dell'intento per ottenere i dati restituiti.


C'è qualcosa di speciale sui codici di risultato incorporati, come RESULT_CANCELED? Il documentation on the developer site sembra suggerire che i risultati incorporati siano semplicemente numeri interi.

E mi sembra che questo potrebbe diventare davvero disordinato? Ad esempio, se avessi 10 attività possibili da avviare, avrei bisogno di una funzione gigante onActivityResult per verificare quale attività viene restituita, no?

risposta

11

C'è qualcosa di speciale sui codici di risultato incorporati, come RESULT_CANCELED? La documentazione sul sito dello sviluppatore sembra indicare che i risultati incorporati sono semplicemente numeri interi.

Sì. Questi codici sono risposte "standard". Ad esempio, se un'attività avviata restituisce RESULT_CANCELED (in particolare, un'attività del sistema operativo o un'app standard come la fotocamera), significa che l'attività è stata annullata. Questi risultati standard dovrebbero essere interpretati in base alla documentazione. In effetti, le tue attività dovrebbero utilizzare questi risultati standard (in modo che gli altri sviluppatori di app possano iniziare più facilmente le tue attività) a meno che non ci sia un motivo valido per non farlo.

E mi sembra che questo potrebbe diventare davvero disordinato? Ad esempio, se io avessi 10 attività possibili da avviare, avrei dovuto disporre di una funzione gigante onActivityResult per verificare quale attività viene restituita, no?

Sì. Usa un'istruzione switch per gestirli.

+0

Grazie, questo mi ha chiarito tutto! –

+0

Se devi utilizzare più dei due codici risultato standard, avvia il tuo primo codice risultato personalizzato con 'Activity.RESULT_FIRST_USER', cioè' static final int MY_RESULT = Activity.RESULT_FIRST_USER' e quindi 'static final int MY_OTHER_RESULT = MY_RESULT + 1' – kap

1

Non c'è nulla di speciale negli interi: quelle costanti sono semplicemente una convenzione. Il tuo onActivityResult potrebbe essere una singola istruzione switch che invia risultati ai metodi per gestirli ... non c'è bisogno che sia gigante. Si dovrebbe, ovviamente, usare costanti simboliche, come sembra che tu sia.

Problemi correlati