OnAttach () no se llama en Fragmento

My Fragment no llama al 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 extiende desde support.v4.Fragment , onAttach(context) call!

¿Cual podría ser el problema?

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

No se llama porque este método se ha agregado en la API 23. Si ejecuta su aplicación en un dispositivo con la API 23 ( onAttach(Context) , se llamará onAttach(Context) . En todas las versiones de Android anterioresAttach onAttach(Activity) se llamará.

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 API.

Aunque Google quiere que dejemos de usar las API obsoletas

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

Es tan nuevo que no es ampliamente llamado. También es necesario 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 apoyo tiende a duplicar mi apk a cerca de 1000kb. Sólo actualizé mi SDK ayer.

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 seguirá siendo llamado cuando se proporciona una Activity ya que ambos son públicamente visibles y la Activity es más especializada que (como una subclase de ) El Context así tendrá precedencia.

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

Si está intentando crear un oyente para el fragmento e inicializar el oyente del método de devolución de llamada onAttach() , onAttach() no se disparará a menos que proporcione el parámetro tag 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); 
  • Reemplazar el soporte obsoleto android.support.v4.app.ActionBarDrawerToggle con soporte.v7 causa que el cajón no funcione en Jelly Bean
  • BottomSheetDialogFragment - Cómo configurar la altura expandida (o el desplazamiento de la parte superior del min)
  • ¿Cómo puedo acceder a getSupportFragmentManager () en un fragmento?
  • No puede acceder a DialogStyle
  • Error en la compilación de Android Gradle: no se pudo encontrar com.google.android:support-v4:r18
  • Error de biblioteca de soporte de Android después de actualizar a 23.3.0
  • ClassCastException: CustomFragment no se puede convertir en android.app.Fragment / Using android.support.v4.app.Fragment
  • La vista personalizada de Android ActionBar no rellena el padre
  • Si utilizo la nueva "biblioteca V7 Appcompat", ¿necesito todavía "V4 Support Library" para un SDK mínimo de 7?
  • Cómo cambiar el color del icono de inicio de la barra de herramientas
  • Fragmentos de Android - findFragmentByTag devuelve siempre null
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.