Android Fragment onCreateView después de onDestroy no se vuelve a llamar
De acuerdo con el ciclo de vida del fragmento de Android esperaría que después de onDestroy
el fragmento será recreado, o al menos onCreateView
se llama de nuevo.
Tengo una Actividad A iniciando otra Actividad B para el resultado y la Actividad B creando un fragmento F.
- Parámetro startId de servicio de Android
- SQLite o SharedPreferences para el almacenamiento de datos persistentes?
- Ejecutar código justo después de que un fragmento se vuelve visible por primera vez
- Android: ¿En qué circunstancias podría aparecer un diálogo que cause onPause ()?
- Servicios de Android: consideraciones sobre el ciclo de vida
public class A extends FragmentActivity { ... public void onButonClick() { Intent intent = new Intent(this, B.class); startActivityForResult(intent, REQUEST_B); } } public class B extends FragmentActivity { ... public void onCreate(Bundle savedInstanceState) { ... this.currentFragment = Fragment.instantiate(this, name); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(this.view.getFragmentContainerId(), this.currentFragment, taskName); transaction.commit(); } } public class F extends Fragment { @override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.view = new MyView(); } @override public void onResume() { this.view.doSomething(); } @override public void onDestroy() { this.view = null; } }
Cuando se crea el fragmento por primera vez todo está bien, se muestra la vista. Dejar la aplicación (como ir a la configuración del sistema) tiene el efecto que onDestroy
del fragmento se llama sin onDestroyView
se está llamando , pero cuando vuelvo a mi app onCreateView
ist no se llama de nuevo lo que causa una NullpointerException porque estoy instanciando la vista Sólo en onCreateView
. Restablecer la vista en onDestroyView
creo que resolvería el problema, pero quiero saber lo que está mal aquí con el lifecycyle y si estoy haciendo algo mal.
Gracias.
Aquí está la salida logcat.
03-11 11:22:47.565 6594-6594/com.xy.android.app I/ActivityA Perform button click. 03-11 11:22:47.595 6594-6594/com.xy.android.app V/ActivityA Pausing activity 03-11 11:22:47.605 6594-6594/com.xy.android.app D/ActivityB Creating activity 03-11 11:22:48.075 6594-6594/com.xy.android.app V/ActivityB Starting activity 03-11 11:22:48.105 6594-6594/com.xy.android.app I/ActivityB Resuming activity 03-11 11:22:48.476 6594-6594/com.xy.android.app I/ActivityB Starting task FragmentF. 03-11 11:22:48.536 6594-6594/com.xy.android.app I/FragmentF Attached to activity. 03-11 11:23:02.350 6594-6594/com.xy.android.app I/FragmentF Creating fragment 03-11 11:23:02.390 6594-6594/com.xy.android.app I/FragmentF Creating view for fragment 03-11 11:23:02.420 6594-6594/com.xy.android.app V/FragmentF View for fragment created 03-11 11:23:02.430 6594-6594/com.xy.android.app D/FragmentF Activity created. 03-11 11:23:02.441 6594-6594/com.xy.android.app V/FragmentF Starting fragment 03-11 11:23:02.741 6594-6594/com.xy.android.app V/ActivityA Saving activity instance state. 03-11 11:23:02.761 6594-6594/com.xy.android.app I/ActivityA Stopping activity 03-11 11:23:07.686 6594-6594/com.xy.android.app V/FragmentF Pausing fragment. 03-11 11:23:07.696 6594-6594/com.xy.android.app V/ActivityB Pausing activity 03-11 11:23:08.517 6594-6594/com.xy.android.app D/FragmentF Save instance state. 03-11 11:23:08.567 6594-6594/com.xy.android.app D/ActivityB Saving activity instance state. 03-11 11:23:08.597 6594-6594/com.xy.android.app I/FragmentF **Destroying fragment** 03-11 11:23:08.627 6594-6594/com.xy.android.app I/ActivityB Stopping activity 03-11 11:23:14.033 6594-6594/com.xy.android.app V/FragmentF Starting fragment 03-11 11:23:14.043 6594-6594/com.xy.android.app V/ActivityB Starting activity 03-11 11:23:14.063 6594-6594/com.xy.android.app I/ActivityB Resuming activity 03-11 11:23:14.063 6594-6594/com.xy.android.app I/FragmentF **Resuming fragment**
- ¿Por qué querría alguna vez `setRetainInstance (false)`? - O - La forma correcta de manejar la rotación del dispositivo
- ¿Por qué podemos llamar a getActivity () en onCreateView que se ejecuta antes onActivityCreated?
- Reiniciar el fragmento dentro de la actividad
- Ciclo de vida de Android: rellena datos en actividad en onStart () o onResume ()?
- Ciclo de vida de la clase de aplicación mientras se ejecuta el servicio
- ¿Los fragmentos con setRetainInstance (true) sobreviven al cierre del proceso?
Después de investigar un tiempo, finalmente "solucioné" el problema creando la vista en onCreateView
y onDestroyView
en onDestroyView
, sin entender por qué el sistema no llama a la devolución de llamada como se describe en la documentación sdk.