android fragment onRestoreInstanceState

120

Apakah saya melewatkan sesuatu atau Fragmenttidak memiliki onRestoreInstanceState()metode? Jika tidak, bagaimana cara saya mencapai sesuatu yang serupa?

Shaun
sumber

Jawaban:

200

Fragmen tidak memiliki onRestoreInstanceStatemetode.

Anda dapat mencapai hasil yang sama di onActivityCreated, yang menerima bundel dengan status instance tersimpan (atau null).

Periksa kode sumbernya di sini .

mgv
sumber
90
Itu bukan desain yang konsisten, bukan?
Ehtesh Choudhury
4
Ini juga tidak menangani melanjutkan fragmen bukan? tidak masalah untuk perubahan konfigurasi, tetapi bagaimana jika Anda membuka aktivitas dari sebuah fragmen lalu kembali ke fragmen?
speedynomads
1
Fragmen harus menjadi bagian dari aktivitas untuk memulai, jadi jika Anda menyimpannya dalam fragmen, ini akan disimpan ke aktivitas induk. Jadi jika Anda meninggalkan fragmen itu (yang termasuk dalam suatu aktivitas) dan kembali ke fragmen, semua nilai kemudian dipulihkan dari aktivitas induk
Shaun
3
onActivityCreated () bukan satu-satunya metode untuk memulihkan status fragmen. Anda bisa memulihkannya selama onCreate (), onCreateView (), atau onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby
1
@EhteshChoudhury Tidak ada dalam pengembangan aplikasi Android yang "desain yang konsisten". Semuanya kacau dan semuanya "usang".
Karanveer Singh
43

Saya tahu, Anda telah menerima jawaban, tetapi Anda harus membaca dokumentasi resmi tentang fragmen , dan tertulis (paragraf "Menangani Siklus Hidup Fragmen"):

Anda bisa mempertahankan status fragmen menggunakan Bundle, jika proses aktivitas dimatikan dan Anda perlu memulihkan status fragmen saat aktivitas dibuat ulang. Anda bisa menyimpan status selama callback onSaveInstanceState () fragmen dan memulihkannya selama onCreate (), onCreateView (), atau onActivityCreated ()

Jadi, Anda dapat menggunakan cocok untuk anda: onCreate(), onCreateView(), atauonActivityCreated()

simpanser
sumber
29

Dalam contoh ListFragment panduan Fragmen, Anda dapat menemukan:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

Yang bisa Anda gunakan seperti ini:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() dipanggil setelah fragmen kembali dari tumpukan.

Gaurav Darji
sumber
13

onViewStateRestoreddari Fragmentadalah setara dengan onRestoreInstanceStatedari Activity. Tetapi disebut setelah onActivityCreated(Bundle)dan sebelum onStart().

nhkhanh
sumber