나는 SO에 대해 비슷한 질문을 많이 발견했지만 불행히도 내 요구 사항을 충족시키는 대답은 없습니다.
세로 및 가로에 대한 레이아웃이 다르고 백 스택을 사용하고 있습니다. 백 스택을 사용 setRetainState()
하면 구성 변경 루틴 을 사용하지 못하고 트릭합니다.
TextViews에서 사용자에게 특정 정보를 표시하지만 기본 핸들러에는 저장되지 않습니다. 활동만을 사용하여 신청서를 작성할 때 다음이 잘 작동했습니다.
TextView vstup;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.whatever);
vstup = (TextView)findViewById(R.id.whatever);
/* (...) */
}
@Override
public void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putCharSequence(App.VSTUP, vstup.getText());
}
@Override
public void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
vstup.setText(state.getCharSequence(App.VSTUP));
}
Fragment
s를 사용하면 매우 구체적인 상황에서만 작동합니다. 특히 끔찍한 부분은 조각을 교체하여 백 스택에 넣은 다음 새 조각이 표시되는 동안 화면을 회전시키는 것입니다. 내가 이해 한 바에 따르면, 오래된 조각은 onSaveInstanceState()
교체 될 때 호출을받지 못하지만 어떻게 든 연결되어 있으며이 Activity
메소드는 View
더 이상 존재하지 않을 때 나중에 호출 되므로 내 TextView
결과를 NullPointerException
.
또한 내 참조를 유지 TextViews
하는 것이 Fragment
s에 괜찮더라도 s에 대한 좋은 아이디어가 아니라는 것을 알았 습니다 Activity
. 이 경우 onSaveInstanceState()
실제로 상태를 저장하지만 조각이 숨겨져있을 때 화면이 두 번 회전 하면 조각이 onCreateView()
새 인스턴스에서 호출되지 않으므로 문제가 다시 나타납니다 .
상태 onDestroyView()
를 일부 Bundle
유형의 클래스 멤버 요소 (실제로 하나의 데이터가 아니라 더 많은 데이터 TextView
)에 저장하고 저장 하는onSaveInstanceState()
데 다른 단점이 있다고 생각 했습니다 . 기본적으로 프래그먼트 가 현재 표시되어 있으면 두 함수를 호출하는 순서가 반대이므로 두 가지 상황을 고려해야합니다. 더 깨끗하고 정확한 해결책이 있어야합니다!