Fragmento – cómo puede getActivity () return null DESPUÉS onAttach
Tengo una clase manager que es un fragmento retenido y no contiene fragmentos retenidos y AsyncTasks de estos fragmentos.
Después de la rotación de la pantalla, quiero vincular los nuevos fragmentos y las tareas de ejecución / terminado entre sí y actualizar los fragmentos con los datos proporcionados por la tarea.
- Doble fragmento de rotación de Android con ActionBar
- Cómo acceder a variables de actividad de un fragmento Android
- Acceso a getString () en un fragmento que implementa un viewpager
- ViewPager en TabFragment no se carga por segunda vez
- Transmisión de datos de un fragmento de actividad a otro fragmento de actividad
Ahora en mi fragmento retenido tengo código siguiente:
@Override public void onAttach(Activity activity) { mFragStatePagerAdapter.update(activity.getSupportFragmentManager()); Debugger.Debug(DEBUG, getClass(), "ON_ATTACH_0: parentActivity: {" + (activity != null ? activity.hashCode() : "NULL") + "}"); for (int i = 0; i < mFragStatePagerAdapter.getFragmentListSize(); i++) { Frag f = mFragStatePagerAdapter.tryGetItem(i); if (f != null) f.onAttach(activity); // alternatively I tried following as well // if (f != null) // activity.getSupportFragmentManager().beginTransaction().attach(f).commit(); Debugger.Debug(DEBUG, getClass(), "ON_ATTACH_1: this: " + this.hashCode() + " fragment: " + f + ", parentActivity: {"+ (f.getActivity() != null ? f.getActivity().hashCode() : "NULL") + "}"); } for (int i = 0; i < mTasks.size(); i++) { if (mTasks.get(i) != null) { Frag f = getFragment(i); mTasks.get(i).attach(f, mTaskCallbacks.get(i)); if (mTasks.get(i).getStatus() == Status.FINISHED) mTasks.get(i).deliverResult(); } } super.onAttach(activity); }
Para explicación:
- Frag … es una clase que extiende el fragmento
- mFragStatePagerAdapter … es un FragmentStatePagerAdapter extendido con funcionalidad para obtener fragmentos por índice …
Ahora mi problema es el siguiente (acortado) salida de depuración:
ON_ATTACH_0: parentActivity: {1123400376}
ON_ATTACH_1: this: 1121944544 fragmento: ExerciseViewFragment {42e2da98}, parentActivity: {NULL}
Entonces, ¿por qué, después de llamar a f.onAttach(activity)
, f.getActivity()
devuelve null? No estoy anulando onAttach
en mi clase de fragmento extendido, por lo que esta no puede ser la razón …
- FragmentPagerAdapter dentro de Fragment
- Llame a la actividad de los padres de un fragmento
- ¿Ciclo de vida de un ViewPager y BackStack reemplazados?
- ¿Cómo inicio una actividad dentro de un Fragmento?
- El cierre de sesión de otra actividad en Google más la integración no es un trabajo
- ViewPager + FragmentPagerAdapter dentro de un DialogFragment obtiene "IllegalArgumentException: No se encontró ninguna vista ..."
- La clase interna del fragmento debe ser estática
- Transmisión de datos de un fragmento en una actividad de otra actividad
Creo que tu problema es llamar
super.onAttach(activity);
al final de su método onAttach
. Llámalo como la primera cosa en este método, como esto:
@Override public void onAttach(Activity activity) { super.onAttach(activity) // and here goes your code [...] }
Según la documentación de https://developer.android.com/reference/android/support/v4/app/Fragment.html#getActivity ()
getActivity()
puede devolver null si el fragmento está asociado con un contexto.
Y de acuerdo con esta documentación https://developer.android.com/reference/android/support/v4/app/Fragment.html#onAttach(android.app.Activity) , onAttach(Activity activity)
está obsoleto, así que use onAttach(Context)
lugar.
- Apertura de Android La intención de Instagram con la imagen causa un accidente
- Obtener la identificación de contacto sin formato de id