2015-03-11 2 views
5

В соответствии с жизненным циклом фрагмента Android я ожидал бы, что после onDestroy фрагмент будет воссоздан или по крайней мере onCreateView вызывается снова.Фрагмент Android onCreateView после onDestroy не вызван снова

У меня есть активность Исходной другой активность В для результата и активность В создании фрагмента 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; 
    } 

} 

Когда фрагмент создается первый раз все нормально, вид показан. Оставив приложение (например, в разделе Настройки системы) имеет аффект, что onDestroy фрагмента вызывается без onDestroyView вызывается, но когда я вернуться в мое приложение onCreateView IST не вызывается снова, который вызывает NullPointerException, потому что я am экземпляра представления только в onCreateView. Сброс вида в onDestroyView Я думаю, что решит проблему, но я хочу знать, что здесь происходит с lifecycyle, и если я что-то делаю неправильно.

Спасибо.

Вот выход логарифма.

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

инициализируйте свой вид в 'onViewCreated()' вместо 'onCreateView()' –

+0

this.currentFragment = Fragment.instantiate (это, имя); Почему вы создаете свой фрагмент, как это, вместо конструктора по умолчанию? попробуйте F фрагмент = новый F(); –

+0

Я думаю, что startactivityForResult() может быть виновником, и вы пропустили методы супервызов, которые вы переопределили в своем фрагменте? –

ответ

1

После исследования некоторое время я окончательно «решить» проблему путем создания представления в onCreateView и уничтожить его в onDestroyView, не понимая, почему система не вызывает функцию обратного вызова, как описано в документации SDK.

Смежные вопросы