2012-12-11 15 views
8

Sto lavorando all'app che utilizza getIntent() per leggere informazioni raggruppate. Vorrei impostare uno dei campi bundle su null, in modo che nei successivi resumes venga ricevuto un intento modificato, ma continuo a ottenere lo stesso intento da getIntent(). Ho notato che dopo aver premuto il tasto Indietro viene prodotto un nuovo intento, ma non altrimenti.Android getIntent() restituisce lo stesso intento in onResume() ogni volta. come cancellare il campo int in un pacchetto?

intent.getExtras().getInt("FLAG_FIELD") returns 1 
intent.getExtras().setString("FLAG_FIELD", null); 

ma quando l'attività riprende nuovamente getInt() restituisce comunque un valore anziché null. Non sono sicuro di come cancellare un campo Int in un pacchetto.

Aggiornamento appena provato:

intent.getExtras().putInt("FLAG_FIELD, -1); 

Anche questo non funziona. Sembra che l'intento di getIntent() non possa essere modificato.

Aggiornamento: onResume() viene chiamato nel debugger per 3 volte di seguito prima che l'attività diventi visibile? Quindi anche se impostassi una bandiera qui sembra che sia difficile cambiare stato perché non posso dire quale chiamata di resume() sia l'ultima prima di una visualizzazione effettiva.

+0

potete inserire le funzioni che utilizzano questo modo abbiamo un po ' contesto? – codeMagic

+0

Sono un po 'confuso ma è necessario modificare il valore quando si utilizza 'intent.putExtra()', quindi verrà modificato la volta successiva che si ottiene l'intento – codeMagic

+0

Bene, l'unica cosa da aggiungere è che sto controllando getIntent () campo in onResume() e quindi cancellando il flag ancora in onResume. La vera domanda è puoi cambiare bundle per getIntent() o è immutabile? sembra immutabile. –

risposta

9

È possibile ignorare onNewIntent() e modificare gli extra lì. Here è la documentazione per questo. Dopo questo metodo, verrà chiamato il tuo onResume() che penso sia quello che stai cercando

+0

Ok. L'altro problema è che sto vedendo che onResume sembra essere chiamato più volte. Quindi, ad esempio, l'attivazione/disattivazione di un flag non funziona in quanto viene eseguito più volte. –

+0

Senza vedere altro del codice non posso dirti molto ma posso dirti che onResume() verrà chiamato dopo l'avvio dell'attività per [Android Activity LifeCycle] (http://developer.android.com/reference/ android/app/Activity.html # ActivityLifecycle) Dovrai sovrascriverlo e inserire il codice per gestire i dati, ma è necessario ... forse un contatore, una bandiera, ecc. è difficile dirlo senza sapere cosa stai facendo – codeMagic

+0

grazie. Ho scoperto che la chiamata aggiuntiva non proveniva da onResume che veniva chiamata eccessivamente ma altre parti del codice. –

0

Nel mio caso il mio problema era un errore con i flag di intent selezionati. Il mio codice non funziona era:

notificationIntent.setFlags((Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)); 

Ora ho risolto con

notificationIntent.setFlags((PendingIntent.FLAG_UPDATE_CURRENT)); 

Sì, non è la soluzione migliore, ma funziona

Problemi correlati