Modifica i dati del bundle di intenti prima che un'attività venga ricreata dopo il cambio di orientamento
-
05-07-2019 - |
Domanda
Ho una notifica che avvia la mia attività e passa un messaggio usando la funzione putExtra () dell'intento. Il messaggio viene quindi visualizzato all'utente nella funzione onCreate dell'attività. Quando l'applicazione viene riavviata a causa di una modifica dell'orientamento, il messaggio viene nuovamente visualizzato in quanto è ancora nei dati raggruppati dell'intento.
Come posso rimuovere i dati extra?
Ho provato quanto segue:
Bundle bundle = getIntent().getExtras();
if (bundle.getBoolean("showMessage")) {
// ... show message that is in bundle.getString("message")
// remove message
bundle.remove("showMessage");
}
Ma il messaggio verrà comunque mostrato dopo che l'orientamento è cambiato, sembra che l'intento usato non sia quello che ho cambiato, ma quello originale. L'unica soluzione che ho trovato è salvare ulteriormente showMessage in o nSaveInstanceState ()
.
C'è un altro modo? O è questa la strada da percorrere?
Soluzione
La (semplice) soluzione è:
Invece di chiamare
bundle.remove("showMessage");
Ora uso
getIntent().removeExtra("showMessage");
che funziona come previsto. Sembra getIntent (). GetExtras () restituisce una copia, non un riferimento.
Altri suggerimenti
Il tuo approccio onSaveInstanceState ()
è la risposta corretta, AFAIK.