According to the Android fragment lifecycle i would expect that after onDestroy
the fragment will be recreated, or at least onCreateView
is called again.
I have an Activity A starting another Activity B for result and Activity B creating a fragment F.
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;
}
}
When the Fragment is created first time everything is ok, the view is shown. Leaving the app (such as going to system settings) has the affect that onDestroy
of the fragment is called without onDestroyView
is being called, but when i go back to my app onCreateView
ist not called again which causes a NullpointerException because i am instantiating the view only in onCreateView
.
Resetting the view in onDestroyView
i think would solve the problem, but i want to know what's going wrong here with the lifecycyle and if i am doing something wrong.
Thanks.
Here is the logcat output.
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**
onViewCreated()
instead ofonCreateView()
– HoustonhoustoniaonCreateView
afteronDestroy
? fromonDestroyView
can return toonCreateView
. – CentalonDestroy
is already overriden but it is not called (correctly) because the activity is only stopped. – HengistonDestroy
of ActivityB is not called, butonDestroy
of Fragment and afterwards onlyonStart
andonResume
of the activity and fragment. – Hengist