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.
No se llama porque este método se ha agregado en la API 23. Si ejecuta su aplicación en un dispositivo con API 23 (malvavisco), se
onAttach(Context)
.
En todas las versiones anteriores de Android, se
onAttach(Activity)
.
http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)
El fragmento de bibliotecas de soporte es independiente de la plataforma. Por lo tanto, funciona en todas las versiones de API.