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.

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 …

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.

  • Fragmento en ViewPager utilizando FragmentPagerAdapter está en blanco la segunda vez que se ve
  • Menú de opciones de la barra de acciones de FragmentActivity
  • ActionItem perdido en la rotación de la pantalla
  • Android ShowDialog: IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
  • Android Cambio de un diseño normal a un error de diseño de tabulación en los botones de imagen y otros?
  • ¿Cuáles son los diferentes métodos de ciclo de vida onCreate () y onCreateView () en Fragment?
  • Si declaro un fragmento en un diseño XML, ¿cómo lo apruebo un paquete?
  • ¿Qué método se desencadena en la creación de AlertDialog?
  • Uso de fragmento anidado y objeto animador al lado
  • Pestaña Switch onNewIntent causa IllegalStateException
  • Android.support.v4.app.FragmentPagerAdapter no se puede aplicar a android.app.FragmentManager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.