tutorial studio navegar fragments example entre dinamicos diferencia desde activity abrir android android-fragments android-activity android-support-library android-fragmentmanager fragmentmanager

navegar - fragments dinamicos android studio



onAttach() no llamado en Fragment (3)

Además de los comentarios mencionados anteriormente, creo que es importante tener en cuenta que si está intentando usar onAttach() para actualizar los datos contenidos dentro del fragmento de la Actividad principal, es posible que se produzcan problemas cuando la variable de recopilación dentro del La actividad es nula o vacía cuando el fragmento está inflado. En algún momento dentro del ciclo de vida de su Actividad, su modelo de datos puede cambiar y debe actualizarse dentro del fragmento. Puede intentar obtener una referencia a un fragmento que ya está inflado, pero a medida que onAttach() por el código, onAttach() nunca se onAttach() , incluso cuando se utiliza la anulación que contiene un objeto Context o Activity.

Si está intentando crear un oyente para el fragmento e inicializarlo desde el método de devolución de llamada onAttach() , onAttach() no se activará a menos que proporcione el parámetro de etiqueta como se muestra a continuación al agregar el fragmento a la Actividad:

// in the Activity getFragmentManager().beginTransaction() .add( R.id.fragmentContainer, CustomFragment.newInstance(customDataSource), CustomFragment.TAG // Must be passed in for the code below to work ).commit(); // Getting a reference to the fragment later on (say to update your data model inside the fragment (in onActivityResult()) CustomFragment fragmentDelegate = (CustomFragment) getFragmentManager().findFragmentByTag(CustomFragment.TAG); fragmentListener.updateDataSource(customDataSource);

My Fragment no onAttach(context) método onAttach(context) cuando se inicia desde AppCompatActivity .

Fragmento de creación en XML:

<fragment android:id="@+id/toolbar" class="package.MainToolbarFragment" android:layout_width="match_parent" android:layout_height="wrap_content" tools:layout="@layout/fragment_main_toolbar" />

Pero si lo extiendo desde support.v4.Fragment , onAttach(context) call!

¿Cual podría ser el problema?

Por supuesto, puedo extender todos los fragmentos desde v4.Fragment , pero no lo quiero. ¿Es una mala práctica? También proyecto min sdk 14.


Mientras que Google quiere que dejemos de usar API obsoletas

@Override public void onAttach(Context context) { super.onAttach(context); ...

Es tan nuevo que no se llama ampliamente. También necesitas implementar

@Override public void onAttach(Activity activity) { super.onAttach(activity); ...

Para mí son idénticos, pero me gusta KISS y la introducción de otra biblioteca de soporte tiende a duplicar mi apk a aproximadamente 1000kb. Ayer solo actualicé mi SDK.

La razón por la cual los tipos no son intercambiables aquí, como lo son en muchos casos, es que el método que toma una Activity todavía se llamará cuando se proporcione una Activity ya que ambos son públicamente visibles y la Activity es más especializada que (como una subclase de ) El Context tendrá prioridad.