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:
- FragmentPagerAdapter no se puede resolver con un tipo
- ¿Cómo puedo evitar métodos obsoletos y mantener la compatibilidad hacia atrás?
- ¿Qué es CoordinatorLayout?
- Ejemplo de FloatingActionButton con la biblioteca de soporte
- Diseño del widget SearchView mediante la biblioteca de soporte v21
<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.
- La vista de reciclaje dentro de NestedScrollView hace que el desplazamiento comience en el centro
- Android no puede cargar SupportV8 RenderScript en api <17
- Mientras uso la biblioteca de soporte técnico estoy recibiendo un error que el atributo "" ya ha sido definido en android
- Nuevo tema incorrecto de la biblioteca de soporte de preferencias en tiempo de ejecución
- Error al inflar la clase android.support.design.widget.NavigationView
- Soporte para Android (cardView, RecyclerView) en versiones anteriores con kitkat de destino
- RecyclerView dentro de ScrollView, algunos elementos no se muestran
- Configuración del fondo de Android y la barra de menús de persistencia - El uso de atributos en las versiones anteriores causa un fallo - ¿Existe un enfoque de tema / patrón?
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