2012-07-14 10 views
6

Verileri depolamak için kullandığım bir Singleton Data sınıfım var. Ben farklı Fragment s erişiyorum.OnSaveInstanceState with Singleton

İlk Fragment yüklendiğinde, Singleton'daki tüm alanların null olduğu bir sorun değildir. İkinci Fragment görüntülendiğinde, verilerini göstermek için bu alanlara bağlıdır. İlk Fragment, bu alanların başlatılmasını sağlar. kullanıcı ikinci Fragment ev düğmesine basar ve sonra bir saat kadar gibi tekrar açar Ancak

, Singleton tüm verilerini kaybetti ve Fragmentnull alanları ulaşmaya çalışır.

onSaveInstanceState yöntemini uygulamak istedim, ancak bunun nasıl çalıştığına bakmadım - Bunu atayacağım verilerin hiçbir örneği yok.

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putSerializable("DATA", Data.getInstance()); 
} 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    savedInstanceState.getSerializable("DATA"); //What to do with this? 
} 

Herhangi bir yardım gelebilir.

+0

: o zaman yapabilirsiniz.END_PARAGRAPH parçaları ... Aksi

((MyActivityClass)getActivity()).getSharedState() 

, sizin tekil nesne seri ve serileştirilemezse edilebilir üye nesnesini yönetmek yapabilir Ama, singleton'un neden tüm verilerini kaybedeceğini anladığımdan emin değilim? Uygulama hala arka planda çalışıyor, değil mi? Uygulamamda aynı paradigmayı kullanıyorum ve bu veri kaybını görmedim. – Aviral

+0

Bu problemi yaşıyorum, sanırım öyle. – nhaarman

+0

İlginç! Singleton'daki verilerin neden kaybolduğuna dair herhangi bir fikriniz varsa, lütfen gönderin. Bu beni endişelendiriyor. Teşekkürler. – Aviral

cevap

1

Parçalar her ikisi de aynı Etkinlikte mi barındırılıyor? Öyleyse, paylaşılan durumu bir Etkinliğin üyesinde saklamayın ve kaydetmek ve geri yüklemek için Etkinliğin onSaveInstanceState() ve onCreate() yöntemini kullanın.

MySingleton.instance().saveTo(outState); 
MySingleton.instance().restoreFrom(savedInstanceState); 
MySingleton.instance().getState(); 

public void restoreFrom(Bundle savedInstanceState) { 
    mState = savedInstanceState.getSerializable("DATA"); 
} 
+0

4 Performans nedenleriyle daha iyi Parcable kullanın. – Roel

0

this'a bakabilirsiniz. onSaveInstanceState yöntem, büyük nesneleri taşımanız gerektiğinde çok tavsiye edilmez.