두 조각 사이를 전환하는 더미 활동을 작성했습니다. FragmentA에서 FragmentB로 이동하면 FragmentA가 백 스택에 추가됩니다. 그러나 FragmentA로 돌아 가면 (뒤로 누름) 완전히 새로운 FragmentA가 만들어지고 상태가 손실됩니다. 이 질문 과 같은 것을 겪고 있다는 느낌 이 들지만 문제를 근절하기 위해 완전한 코드 샘플을 포함 시켰습니다.
public class FooActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, new FragmentA());
transaction.commit();
}
public void nextFragment() {
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, new FragmentB());
transaction.addToBackStack(null);
transaction.commit();
}
public static class FragmentA extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View main = inflater.inflate(R.layout.main, container, false);
main.findViewById(R.id.next_fragment_button).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
((FooActivity) getActivity()).nextFragment();
}
});
return main;
}
@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save some state!
}
}
public static class FragmentB extends Fragment {
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.b, container, false);
}
}
}
일부 로그 메시지가 추가 된 경우 :
07-05 14:28:59.722 D/OMG ( 1260): FooActivity.onCreate
07-05 14:28:59.742 D/OMG ( 1260): FragmentA.onCreateView
07-05 14:28:59.742 D/OMG ( 1260): FooActivity.onResume
<Tap Button on FragmentA>
07-05 14:29:12.842 D/OMG ( 1260): FooActivity.nextFragment
07-05 14:29:12.852 D/OMG ( 1260): FragmentB.onCreateView
<Tap 'Back'>
07-05 14:29:16.792 D/OMG ( 1260): FragmentA.onCreateView
FragmentA.onSaveInstanceState를 호출하지 않으며 되돌릴 때 새 FragmentA를 만듭니다. 그러나 FragmentA를 사용 중이고 화면을 잠그면 FragmentA.onSaveInstanceState가 호출됩니다. 너무 이상합니다 ... 다시 생성 할 필요가 없도록 백 스택에 조각을 추가 할 것으로 잘못 생각합니까? 문서에서 말하는 내용은 다음과 같습니다 .
조각을 제거 할 때 addToBackStack ()을 호출하면 조각이 중지되고 사용자가 다시 탐색하면 조각이 다시 시작됩니다.
ListView
. 스크롤 리스너를 연결하고 인스턴스 변수를 업데이트하기에는 너무 많은 후프 점핑처럼 보입니다.