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); 
  • Android - Fragmento de la biblioteca de soporte no compatible con la plataforma 4.3
  • No se puede resolver el símbolo HttpGet, HttpClient, HttpResponce en Android Studio
  • ¿Cómo puedo requestDisallowTouchEvents en Android DrawerLayout
  • Reemplazar el soporte obsoleto android.support.v4.app.ActionBarDrawerToggle con soporte.v7 causa que el cajón no funcione en Jelly Bean
  • ¿Es posible Proguard un módulo de biblioteca de Android, pero no el módulo de aplicación?
  • Parte del fragmento dentro de ViewPager se corta en la parte inferior de la pantalla (Android)
  • ¿Cómo agregar un proyecto de biblioteca externa a Android Studio 1.2.2? Con solución
  • ¿Qué es el ButtonBarLayout y cómo debemos usarlo?
  • Problema de superposición de sugerencias de TextInputLayout
  • Actualizar Android SDK causa bloqueo java.lang.VerifyError
  • No se puede ejecutar dex: varios archivos dex definen Lbolts / AggregateException
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.