У меня есть Activity
под названием HomeActivity
, в котором используются фрагменты HomeFragment
и OwnershipFragment
.NullPointerException брошен в onSaveInstanceState после выхода из фрагмента
Когда я нажимаю элемент списка в HomeFragment
, выполняется транзакция фрагмента и запускается OwnershipFragment
.
В OwnershipFragment
я следующий метод: onSaveInstanceState
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
for(int i = 0; i <mDirectors.size(); i++)
mDirectors.get(i).updateFromForm();
outState.putSerializable(DIRECTORS, mDirectors);
}
И в onCreateView
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_ownership, container, false);
mFormContainer = (LinearLayout) rootView.findViewById(R.id.ownership_form_container);
mManager = new SessionManager(getActivity());
mDirectors = new ArrayList<Director>();
if (savedInstanceState != null)
mDirectors = (ArrayList<Director>) savedInstanceState.getSerializable(DIRECTORS);
else
mDirectors = mManager.getDirectors();
//Other stuff
return rootView;
}
В основном, приложение падает после того, как следующее:
- я нажимаю в элементе списка, который открывается
OwnershipFragment
. (отлично работает) - Я нажимаю кнопку «Назад», которая начинает транзакцию, которая возвращается к
HomeFragment
и помещаетOwnershipFragment
в задний стек. (отлично работает) - Я поворачиваю свой телефон, чтобы изменить ориентацию в альбомном режиме. (Работает отлично)
- я включаю его обратно в портрет и аварий приложений и дает
NullPointerException
по адресу:
для (INT I = 0; я < mDirectors.size(); я ++) // в onSaveInstanceState методе
Я не могу понять, почему, хотя, потому что я не могу найти, где mDirectors
присваивается значение null
. Я не уверен, что другой код, чтобы обеспечить, таким образом, просто дайте мне знать, и я положу его.
Почему onSaveInstanceState
из OwnershipFragment
называют в первую очередь, если текущий фрагмент отображаемая HomeFragment
?
Вот мой Logcat:
07-15 11:28:24.440: E/AndroidRuntime(12150): FATAL EXCEPTION: main
07-15 11:28:24.440: E/AndroidRuntime(12150): java.lang.NullPointerException
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.opendoors.core.OwnershipFragment.onSaveInstanceState(OwnershipFragment.java:204)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Fragment.performSaveInstanceState(Fragment.java:1840)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1598)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1655)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Activity.onSaveInstanceState(Activity.java:1233)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:546)
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.opendoors.core.HomeActivity.onSaveInstanceState(HomeActivity.java:220)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Activity.performSaveInstanceState(Activity.java:1181)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1233)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3778)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread.access$800(ActivityThread.java:152)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1288)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.os.Handler.dispatchMessage(Handler.java:99)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.os.Looper.loop(Looper.java:137)
07-15 11:28:24.440: E/AndroidRuntime(12150): at android.app.ActivityThread.main(ActivityThread.java:5328)
07-15 11:28:24.440: E/AndroidRuntime(12150): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 11:28:24.440: E/AndroidRuntime(12150): at java.lang.reflect.Method.invoke(Method.java:511)
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
07-15 11:28:24.440: E/AndroidRuntime(12150): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
07-15 11:28:24.440: E/AndroidRuntime(12150): at dalvik.system.NativeStart.main(Native Method)
один из этих методов возвращает null 'if (savedIns tanceState! = null) mDirectors = (ArrayList) savedInstanceState.getSerializable (DIRECTORS); else mDirectors = mManager.getDirectors(); ' –
Я поставил точку останова прямо перед этими утверждениями, а во время ошибки они не вызываются. Я не думаю, что 'onCreateView' для' OwnershipFragment' даже называется вообще, когда я меняю ориентацию 'HomeFragment' – ujvl