简体   繁体   中英

Android Fragment onCreateView after onDestroy not called again

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**

经过一段时间的调查,我终于通过在onCreateView创建视图并在onDestroyView销毁它来“解决”了这个问题,却没有理解为什么系统不按照sdk文档中的描述调用回调。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM