RestoreInstanceState üzerinde android parçası


120

Bir şey mi kaçırıyorum veya Fragmentbir onRestoreInstanceState()yöntemim yok mu? Değilse, benzer bir şeyi elde etmeye nasıl devam ederim?

Yanıtlar:


200

Parçaların bir onRestoreInstanceStateyöntemi yoktur.

onActivityCreatedKaydedilmiş örnek durumuna (veya null) sahip bir paket alan uygulamada aynı sonucu elde edebilirsiniz .

Kaynak kodunu buradan kontrol edin .


90
Bu tutarlı bir tasarım değil, değil mi?
Ehtesh Choudhury

4
Bu aynı zamanda parçanın devam etmesini de sağlamaz, değil mi? yapılandırma değişiklikleri için sorun değil, ama ya bir parçadan bir etkinliğe gidip parçaya geri dönerseniz?
speedynomads

1
Parçalar, başlamak için bir etkinliğe ait olmalıdır, bu nedenle parçada kaydederseniz, ana etkinliğe kaydeder. Dolayısıyla, bu parçayı (bir etkinliğe ait olan) bırakırsanız ve bölüme geri dönerseniz, tüm değerler ana etkinlikten geri yüklenir
Shaun

3
onActivityCreated (), parçanın durumunu geri yüklemek için tek yöntem değildir. onCreate (), onCreateView () veya onActivityCreated () sırasında geri yükleyebilirsiniz. developer.android.com/guide/components/fragments.html
shaby

1
@EhteshChoudhury Android uygulama geliştirmede hiçbir şey "tutarlı tasarım" değildir. Her şey berbat ve her şey "kullanımdan kaldırıldı".
Karanveer Singh

43

Cevabı kabul ettiğinizi biliyorum, ancak parçalarla ilgili resmi belgeleri okumalısınız ve yazıyor ("Parçacık Yaşam Döngüsünü Kullanma" paragrafı):

Aktivitenin işleminin sonlandırılması ve aktivite yeniden oluşturulduğunda fragman durumunu geri yüklemeniz gerekmesi durumunda bir Paket kullanarak bir parçanın durumunu koruyabilirsiniz. Durumu parçanın onSaveInstanceState () geri araması sırasında kaydedebilir ve onCreate (), onCreateView () veya onActivityCreated () sırasında geri yükleyebilirsiniz.

Yani, bu takım kullanabilirsiniz en iyi: onCreate(), onCreateView()veyaonActivityCreated()


29

Fragments kılavuzunun ListFragment örneğinde şunları bulabilirsiniz:

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

Bunun gibi kullanabileceğiniz:

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

onActivityCreated() parça yığından geri döndükten sonra çağrılır.


13

onViewStateRestoredarasında Fragmenteşdeğerdir onRestoreInstanceStatearasında Activity. Ama sonra onActivityCreated(Bundle)ve önce denir onStart().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.