Può sembrare una domanda stupida, ma qual è la differenza tra getArguments Bundle e Bundle ricevuti su onCreate?Android - Qual è la differenza tra getArguments e Bundle ricevuti su onCreate
risposta
Il pacchetto ricevuto in onCreate contiene i dati forniti più recentemente se l'attività è stata ricreata e getArguments Bundle restituisce il pacchetto che è stato fornito come argomento.
Il bundle di argomenti utilizzato per la creazione di frammenti e una volta impostato non può essere impostato nuovamente. Il bundle in onCreate/onCreateView/onActivityCreated/onViewStateRestored è il parametro SavedInstanceState. È possibile utilizzare questo ottenere i valori persistenti persistono tramite sostituzioni onSaveInstanceState
. Al momento della creazione del frammento, il pacchetto savedInstanceState è in genere null, quindi è possibile utilizzare getArguments.
Un'altra cosa sui getArguments, non è necessario mantenere questi valori. Verranno ricreati per te dal fragment code. Se si tenta di setArguments su un frammento che li ha già si esegue in un IllegalStateException
TL; DR:
Fragment.getArguments() serve a creare inizialmente un frammento.
onCreate (pacchetto) è per il recupero del pacchetto da un'istanza precedente.
In dettaglio:
Sono stato purga il web per questo e ha chiesto uno sviluppatore Android stagionato, ecco una spiegazione decente:
Il Bundle passato come parametro nella onCreate la funzione è valida se è presente un'istanza precedente di Fragment, che viene aggiornata quando viene chiamata la funzione onSaveInstanceState. (si può leggere di più su questo nella documentazione ufficiale qui: https://developer.android.com/training/basics/activity-lifecycle/recreating.html)
I Fragment.getArguments() funzione tuttavia, viene utilizzato quando inizialmente la creazione del frammento. Stai per navigare su un frammento per la prima volta e un'istanza precedente di quel frammento non esiste. In questo caso, è possibile impostare le variabili locali all'interno del frammento che è stato condiviso utilizzando le funzioni setArguments() & getArguments(). (più su quello qui: https://developer.android.com/reference/android/app/Fragment.html)
Pertanto: codice robusto potrebbe essere la seguente:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
mView = inflater.inflate(R.layout.fragment_name, container, false);
mContext = getActivity();
if(savedInstanceState != null){
Log.d("yourapp", "A SavedInstanceState exists, using past values");
mValue = savedInstanceState.getString("valueString");
}else{
Log.d("yourapp", "A SavedInstanceState doesn't exist");
Bundle bundle = getArguments();
mValue = bundle.getString("valueString");
}
}
che gestisce entrambi i casi nel vostro stato onCreate.
Spero che questo aiuti!
Desidero aggiungere alla risposta N15M0_jk. A volte non è necessario salvare lo stato dei frammenti (per i frammenti statici) e si può utilizzare solo per la ricreazione poiché gli argomenti impostati con setArguments()
vengono mantenuti anche dopo la distruzione.
vedere il riferimento sulla setArguments()
- 1. Qual è la differenza tra bundle Docker e docker-compose?
- 2. Differenza tra installazione bundle e bundle
- 3. Qual è la differenza tra Android: layout_width e Android: larghezza
- 4. Qual è la differenza tra @android: e Android:?
- 5. Qual è la differenza tra getTargetContext() e getContext (su InstrumentationRegistry)?
- 6. Differenza tra $ Bundle installare e $ Bundle aggiornare
- 7. Qual è la differenza tra getSupportFragmentManager() e getChildFragmentManager()?
- 8. Qual è la differenza tra un pacchetto e un intento?
- 9. Qual è la differenza tra = e: =
- 10. qual è la differenza tra @ id/e @ + id/in android?
- 11. Qual è la differenza tra attività e intenzioni in Android?
- 12. Qual è la differenza tra hasFocus() e isFocused() in Android?
- 13. Android: Qual è la differenza tra View.inflate e getLayoutInflater(). Gonfia?
- 14. Qual è la differenza tra fontFamily e typeFace in Android?
- 15. qual è la differenza tra windowActionBar e Android: windowActionBar
- 16. Qual è la differenza tra Adapter e AdapterView in Android?
- 17. Android: Qual è la differenza tra Activity.runOnUiThread e View.post?
- 18. Perché l'oggetto Bundle è sempre nullo su onCreate()?
- 19. Qual è la differenza tra Verilog! e ~?
- 20. Qual è la differenza tra? : e ||
- 21. qual è la differenza tra [[], []] e [[]] * 2
- 22. Qual è la differenza tra $ e $$?
- 23. Qual è la differenza tra ("") e (null)
- 24. Qual è la differenza tra dict() e {}?
- 25. Qual è la differenza tra " " e ""?
- 26. Qual è la differenza tra {0} e ""?
- 27. Qual è la differenza tra `##` e `hashCode`?
- 28. Qual è la differenza tra {0} e +?
- 29. Qual è la differenza tra .ToString() e + ""
- 30. qual è la differenza tra:.! e: r !?
Grazie, hai risolto il mio mal di testa, non sapevo perché onSaveInstanceState era inutile! – Burrich