Modifica i dati del bundle di intenti prima che un'attività venga ricreata dopo il cambio di orientamento

StackOverflow https://stackoverflow.com/questions/1206418

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top