2011-05-18 19 views
28

Etkinlik durumu kaydetme ve geri yükleme işlemlerinin farkındayım. Fakat yapmak istediğim, bir görüntünün durumunu kaydetmek ve geri yüklemek. İçinde özel bir görünüm ve iki overrided yöntemleri vardır: Görünüm durumunu geri yükleme ve geri yükleme durumu android

@Override 
protected void onRestoreInstanceState(Parcelable state) { 
    if (state instanceof Bundle) { 
     Bundle bundle = (Bundle) state; 
     currentLeftX = bundle.getInt(CURRENT_LEFT_X_PARAM, 0); 
     currentTopY = bundle.getInt(CURRENT_TOP_Y_PARAM, 0); 
    } 
    super.onRestoreInstanceState(state); 
} 

@Override 
protected Parcelable onSaveInstanceState() { 
    super.onSaveInstanceState(); 
    Bundle bundle = new Bundle(); 
    bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX); 
    bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY); 
    return bundle; 
} 

bu sorunsuz çalışması bekleniyor, ancak karşılaştı ve hata:

Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.os.Bundle instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/mapViewId. Make sure other views do not use the same id. at android.view.View.onRestoreInstanceState(View.java:6161)

Ancak bu benim aktivitesinde sadece bir tanesidir. Bu yüzden soruyorum:

Görünümün durumunu kaydetmenin doğru yolu nedir?

+0

nedeniyle Android'in tasarım ne kadar saçma gülmek zorunda kaldı. Yöntem beklemiyor *** durumu açıkça ***, *** *** *** Parcelable *** adlı bir arabirim bekliyor ***. Ve evet, *** Bundle *** tarafından uygulanan geçerli bir *** Parcelable *** döndürüyoruz. Ama saçma bir sebepten dolayı başarısız oldu. .NET'te bu tür bir tasarımla hiç karşılaşmadım, bir arabirim beklediğinde, tam arabirimi döndürürsek herhangi bir istisna olmamalı. Istisna başka bir şey daha mantıklı hale getirmelidir =))) Android, *** bad *** tasarımının sizi nasıl sinirlendirdiğini gösteren büyük bir örnektir. OnSaveInstanceState öğesinin varsayılan uygulaması –

cevap

-3

yanılıyor olabilirim ama Demet ebeveyn döner kaydetmek gerekir düşünüyorum: Aksi halde kaybediyorsun

@Override 
protected Parcelable onSaveInstanceState() { 
    Parcelable bundle = super.onSaveInstanceState(); 
    bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX); 
    bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY); 
    return bundle; 
} 

süper sınıfın kaydettiği her şey.

+4

null değerini döndürür. Ayrıca, burada paket putive gibi herhangi bir yöntemi olmayan Parcelable'dır. –

İlgili konular