Saya telah menulis aktivitas boneka yang beralih di antara dua fragmen. Ketika Anda pergi dari FragmentA ke FragmentB, FragmentA ditambahkan ke tumpukan belakang. Namun, ketika saya kembali ke FragmentA (dengan menekan kembali), FragmentA yang sama sekali baru dibuat dan keadaan tempatnya hilang. Saya merasa bahwa saya mencari hal yang sama dengan pertanyaan ini , tetapi saya telah memasukkan contoh kode lengkap untuk membantu membasmi masalah:
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);
}
}
}
Dengan beberapa pesan log ditambahkan:
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
Itu tidak pernah memanggil FragmentA.onSaveInstanceState dan itu menciptakan FragmentA baru ketika Anda menekan kembali. Namun, jika saya menggunakan FragmentA dan saya mengunci layar, FragmentA.onSaveInstanceState dipanggil. Sangat aneh ... apakah saya salah mengharapkan fragmen yang ditambahkan ke tumpukan belakang tidak perlu dibuat ulang? Inilah yang dikatakan dokumen :
Sedangkan, jika Anda memanggil addToBackStack () saat menghapus sebuah fragmen, maka fragmen tersebut dihentikan dan akan dilanjutkan jika pengguna menavigasi kembali.
ListView
. Sepertinya terlalu banyak omong kosong untuk melampirkan pendengar gulir dan memperbarui variabel instan.