usar support studio setuservisiblehint porque oncreateview onattach fragments example developer android

support - Android: ¿Cuál es la diferencia entre getArguments y Bundle recibidos en onCreate?



setuservisiblehint (4)

Puede parecer una pregunta estúpida, pero ¿cuál es la diferencia entre getArguments Bundle y Bundle recibidos en onCreate?


El paquete de argumentos utilizado para la creación de fragmentos y una vez establecido no se puede configurar de nuevo. El paquete en onCreate / onCreateView / onActivityCreated / onViewStateRestored es el savedInstanceState. Puede usar esta onSaveInstanceState obtener los valores persistentes que persiste mediante onSaveInstanceState anulaciones de onSaveInstanceState . Tras la creación del fragmento, el paquete savedInstanceState suele ser nulo, por lo que es posible que desee utilizar getArguments.

Otra cosa sobre los getArguments, no tiene que persistir estos valores. Ellos serán recreados por el código del fragmento . Si intenta establecer argumentos en un fragmento que ya los tiene, se encontrará con una IllegalStateException


El paquete recibido en onCreate contiene los datos que se proporcionaron más recientemente si la actividad se recrea y el paquete GetArguments devuelve el paquete que se proporcionó como argumento.


Me gustaría agregar a la respuesta de N15M0_jk . A veces no hay necesidad de guardar el estado de los fragmentos (para los fragmentos estáticos) y puede usar solo getArguments() para getArguments() ya que los argumentos establecidos con setArguments() se conservan incluso después de la destrucción.

Vea la referencia en setArguments()


TL; DR:

Fragment.getArguments () es para crear inicialmente un Fragmento.

onCreate (Bundle) es para recuperar el Bundle de una instancia anterior.

En detalle:

He estado recorriendo la web en busca de esto y le he preguntado a un desarrollador de Android experimentado, así que aquí hay una buena explicación:

El Bundle pasado como parámetro en la función onCreate es para si hubo una instancia anterior del Fragmento, que se actualiza cuando se llama a la función onSaveInstanceState . (Puede leer más sobre esto en los documentos oficiales aquí: https://developer.android.com/training/basics/activity-lifecycle/recreating.html )

Sin embargo, la función Fragment.getArguments () se utiliza al crear inicialmente su fragmento. Vas a navegar a un Fragmento por primera vez, y no existirá una instancia previa de ese Fragmento. En este caso, puede establecer sus variables locales dentro de su Fragmento que fue compartido usando las funciones setArguments () y getArguments (). (Más sobre eso aquí: https://developer.android.com/reference/android/app/Fragment.html )

Por lo tanto: El código robusto podría verse así:

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"); } }

que maneja ambos casos en su estado onCreate.

¡Espero que esto ayude!