나는 자신의 상태 (선택된 버튼 등)를 가진 조각을 가지고있다. 그 상태는 화면 회전에서 사라집니다.왜 내 조각 onSaveInstanceState()가 호출되지 않습니까?
조각이 포함 된 활동에는/res/layout /에 세로 레이아웃이 있고/res/layout-land /에는 거의 동일한 가로 레이아웃이 있습니다. 두 레이아웃은 조각과 같이 포함 :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/testFragment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
class="au.com.x.y.TestFragment" />
...</LinearLayout>
내가 함께 테스트를 봤는데 조각 클래스는 다음에서 가져 나는 조각에 대한 사전 3.0 지원 패키지를 사용하고
public class TestFragment extends android.support.v4.app.Fragment {
private static final String TAG = "TestFragment";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate(): " +
(savedInstanceState != null ? "NOT NULL" : "NULL"));
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.i(TAG, "onActivityCreated(): " +
(savedInstanceState != null ? "NOT NULL" : "NULL"));
}
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
Log.i(TAG, "onSaveInstanceState()");
state.putString("saved_thing", "some_value");
}
public View onCreateView(
LayoutInflater inflater,
ViewGroup container,
Bundle b) { ... }
}
주, ActionBarSherlock을 통해. 당신이 볼 수 있듯이, onSaveInstanceState()
가 호출되지 않습니다
BEFORE SCREEN ROTATION (PORTRAIT):
02-23 11:45:58.015: I/TestFragment(22629): onCreate(): NULL
02-23 11:45:58.015: I/TestFragment(22629): onCreateView()
02-23 11:45:58.035: I/TestFragment(22629): onActivityCreated(): NULL
AFTER SCREEN ROTATION (LANDSCAPE):
02-23 11:46:00.615: I/TestFragment(22629): onCreate(): NULL
02-23 11:46:00.615: I/TestFragment(22629): onCreateView()
02-23 11:46:00.635: I/TestFragment(22629): onActivityCreated(): NULL
, 그리고 조각은 항상 onCreate()
및 onActivityCreated()
모두에서 널 savedInstanceState
를 가져옵니다
로그 캣이 날 수 있습니다.
나는 내 활동 인 onCreate()
에서 myFragment.setRetainInstance(true)
을 시도했지만 아무 것도 변경하지 않았습니다.
내 onSaveInstanceState()
에는 @Override가 있으므로 오타와 같은 무언가가 아닙니다.
ActionBarSherlock 예제 (com.actionbarsherlock.sample.shakespeare) 중 하나를 살펴본 결과 해당 메서드가 제대로 호출 된 onSaveInstanceState()
메서드가 있습니다. 내가 알 수있는 한,이 예제는 레이아웃과 레이아웃 랜드 XML을 통해 내 코드가 — 조각 인 방식으로 정확하게 작성된 것입니다. 필자는 주 프로젝트가 사용하고있는 것과 동일한 버전의 ActionBarSherlock을 사용하여 샘플을 빌드했으며 인스턴스 상태를 저장하면 해당 예제가 올바르게 작동합니다.
화면 회전간에 조각 상태를 유지하려면 어떻게해야합니까? onSaveInstanceState()
이 (가) 호출되지 않는 이유는 무엇입니까?
시도해보고 @Override'onPause()'/'onResume()'. –
순환 순서는 onPause(), onDestroy(), onCreate(), onCreateView(), onActivityCreated(), onResume()입니다. savedInstanceState는 여전히 항상 null이고 onSaveInstanceState()는 호출되지 않습니다. onSaveInstanceState()를 명시 적으로 호출 할 필요가 없어야한다고 확신합니다. – George
두 개의 다른 장소 (세로 레이아웃 대 가로 레이아웃)에서 참조되는 프래그먼트와 관련된 문제가 있습니까? 아마 이것들이 안드로이드에게 상태를 공유해서는 안되는 두 개의 다른 조각이라는 신호인가? – George