В соответствии с жизненным циклом фрагмента 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**
инициализируйте свой вид в 'onViewCreated()' вместо 'onCreateView()' –
this.currentFragment = Fragment.instantiate (это, имя); Почему вы создаете свой фрагмент, как это, вместо конструктора по умолчанию? попробуйте F фрагмент = новый F(); –
Я думаю, что startactivityForResult() может быть виновником, и вы пропустили методы супервызов, которые вы переопределили в своем фрагменте? –