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:
- NotificationBuilder.setProgress no hace nada en 2.3.5
- Cambiar altura de pagerTabStrip tabIndicator
- Agregar biblioteca de soporte al proyecto de Android Studio
- Biblioteca de soporte de Android lanzando una excepción de recursos no encontrados
- Excepción en el complemento de Android del complemento
<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.
- Obtener posición del artículo desde el adaptador personalizado
- Biblioteca de soporte de diseño V22 - No hay fuentes?
- ViewPager dentro de Fragmento pierde su contenido cuando se vuelve a mostrar el fragmento
- No puede acceder a DialogStyle
- Problema al eliminar la biblioteca supportV4
- ¿Hay alguna razón para usar la biblioteca support.v4 en Android?
- ¿Qué es CoordinatorLayout?
- No se encontró identificador de recurso para el atributo 'layoutManager' en el paquete 'android.support.design'
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);
- Creación de ViewHolders para ListViews con diferentes diseños de elementos
- Barra de Acción elemento de menú color del texto