Zgodnie z cyklem życia fragmentu Androida spodziewałbym się, że po onDestroy
fragment zostanie odtworzony, lub co najmniej onCreateView
zostanie wywołany ponownie.Android Fragment onCreateView po onDestroy nie jest ponownie wywoływany
I wykazują aktywność A i wyjściowy innego aktywny B dla związku i aktywność limfocytów B tworząc 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;
}
}
gdy fragment jest utworzony pierwszy raz wszystko jest w porządku, widok jest pokazany. Pozostawienie aplikacji (takich jak chodzenie do ustawień systemowych) ma wpłynąć że onDestroy
fragmentu nazywa bez onDestroyView
jest nazywany, ale kiedy wrócę do mojej aplikacji onCreateView
ist nie nazwie ponownie co powoduje NullPointerException bo Tworzę widok tylko w onCreateView
. Zresetowanie widoku w onDestroyView
Myślę, że rozwiązałoby to problem, ale chcę wiedzieć, co dzieje się tutaj z lifecycyle i jeśli robię coś złego.
Dzięki.
Oto dane wyjściowe 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**
zainicjuj swój widok w 'onViewCreated()' zamiast 'onCreateView()' –
this.currentFragment = Fragment.instantiate (this, name); Dlaczego zachowujesz swój fragment w ten sposób zamiast domyślnego konstruktora? spróbuj F fragment = nowy F(); –
Przypuszczam, że startactivityForResult() może być winowajcą i czy przeoczyłeś metody super-połączeń, które przesłoniłeś w swoim fragmencie? –