Conosco il "newInstance" -Pattern (Best practice for instantiating a new Android Fragment). Ma come faccio ad aggiornare questi argomenti di un frammento, ad esempio se un altro frammento modifica i dati?Le migliori pratiche per l'aggiornamento degli argomenti di un frammento?
Conosco i metodi di callback tra Fragments/Activitys, ma questi callback non aggiornano gli argomenti ?!
Ad esempio: durante la creazione del frammento, passo un URI al gruppo con il pacchetto. Quindi un altro frammento modifica questo URI tramite la callback del metodo changeUri (Uri uri) sul primo frammento. Se poi il frammento viene ricreato (ad esempio a causa della rotazione dello schermo) userà il primo URI dal bundle di argomenti invece del uri aggiornato successivamente, corretto?
Qual è la migliore pratica per risolvere questo? Devo memorizzarlo manualmente in savedInstanceState e al momento dell'utilizzo decidere se utilizzare instanceState o arguments-bundle?
Sto cercando un modo standard di gestire gli argomenti dei miei frammenti, quindi penso che sto andando con questo tipo di approccio (pseudo-codice):
private Uri arg1;
public static Fragment newInstance(Uri arg1) {
create bundle
create fragment instance
set bundle to fragment
return fragment
}
private void onCreate(Bundle savedInstance) {
if(savedInstance != null) {
arg1 = savedInstance.uri
}
}
private Uri getUri() {
if(arg1 == null) {
arg1 = getArguments.uri
}
if(arg1 == null) {
arg1 = defaultValue
}
}
Così ho un semplicemente unificato modo per accedere alla mia discussione. E non devi usare il fastidio se-else, ogni volta che ho bisogno di quell'argomento.
Cosa ne pensi?
Sì. Di che codice sta parlando? Un metodo oveeriden -'onSaveInstanceState'- con 1 riga in più e un'istruzione if-else in 'onCreate'? – gunar
I frammenti dei difetti di progettazione fallita non dovrebbero dipendere da altri frammenti – danny117
Che dire di "riscrivere" gli argomenti in un metodo pubblico di quel frammento? –