나는 한 조각 OwnershipFragment
의 onSaveInstanceState
방법으로 정의 : 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);
}
, 내가 이전의 단편 HomeFragment
로 돌아가지만, 내 휴대 전화/변화 방향을 설정하는 경우 onSaveInstanceState
이 OwnershipFragment
인 경우 계속 호출됩니다. onSaveInstanceState
이 OwnershipFragment
요구되기 때문에
문제는 OwnershipFragment
라는 onCreateView
(가 다시 스택에서의로 보는)를 가진 적이 이후가 초기화되지 않았다 때문에 나는 mDirectors
에 nullpointerexception
를 얻을 수있다.
어떻게하면 올바르게 처리 할 수 있습니까?
조각 트랜잭션을 실행하는 내 액티비티에 onSaveInstanceState
을 구현해야한다고 추측합니다. 그러나 그렇게 할 방법이 확실하지 않습니다.
public void displayView(int position) {
Fragment fragment = null;
switch (position) {
case HOME:
fragment = new HomeFragment();
break;
case OWNERSHIP:
fragment = new OwnershipFragment();
break;
}
//Replace fragment
FragmentTransaction ft = mManager.beginTransaction();
ft.replace(R.id.home_container, fragment, FRAGMENT_TAG);
ft.addToBackStack(null).commit();
}
}
을 그리고 여기 내 로그 캣입니다 :
이
는 방법은HomeActivity
의 조각을 대체하기 위해 호출됩니다
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)
잘못된 정보를 수정할 수 있도록 내가 downvoted 된 이유가있을 수 있습니까? – ujvl
이상하게 들리 겠지만, onSaveInstanceState()는 조각화가 인스턴스화되지 않은 경우 호출하지 않습니다. – VinceStyling
나는 디버깅을했고 for 루프는 실제로 조각이 현재 것이 아니라는 사실에도 불구하고'NullPointerExcetion'을 얻은 곳입니다. – ujvl