Possiedo un frammento di libreria di supporto che invia una chiamata di rete e recreate()
l'attività principale quando riceve una risposta di rete specifica. Riesco a vedere che l'attività viene ricreata come posso vedere sono chiamati i numeri onCreate()
e onDestroy()
.Frammenti non distrutti durante l'attività di recreate()
Ma dopo che l'attività è stata ricreata, il frammento è ancora lì e si è bloccato in un loop che continua a ricreare e creare nuovi frammenti.
Ecco parte del onCreate()
dell'attività:
if (someLogic()) {
fragmentA = new FragmentA();
FragmentUtil.addFragment(getSupportFragmentManager(), fragmentA);
} else {
fragmentB = new FragmentB();
FragmentUtil.addFragment(getSupportFragmentManager(), fragmentB);
}
Fragmenta è quella che fa la chiamata di rete, e FragmentB è il frammento che dovrebbe essere visualizzato dopo l'recreate()
. Quando controllo l'elenco dei frammenti con getSupportFragmentManager().getFragments()
, vedo 1 istanze di FragmentA e 16 istanze di FragmentB.
La mia domanda è: perché succede e come risolverlo?
Puoi mostrare come aggiungi i frammenti e ricreare l'attività? La mia ipotesi è che è necessario rimuovere fragmentA prima di riavviare l'attività, ma avrei bisogno di vedere il codice. A proposito, perché non sostituisci semplicemente fragmentA con fragmentB invece di riavviare l'attività? –
Non è una risposta concreta o è la soluzione ideale ma è possibile controllare lo stack dei frammenti e aggiungere un nuovo frammento se necessario, altrimenti è possibile sostituire/aggiornare il frammento corrente – zgc7009