Ne kurtarmalı ve ne yapılmamalı?
Hiç merak ettiniz mi? EditText
yön değiştirilirken otomatik olarak kaydedildiğini mi? Bu cevap tam size göre.
Bir Etkinliğin bir örneği yok edildiğinde ve Sistem yeni bir örneği yeniden oluşturduğunda (örneğin, yapılandırma değişikliği). Eski Etkinlik Durumunun ( örnek durum ) kaydedilmiş bir veri kümesini kullanarak yeniden oluşturmaya çalışır .
Eşgörünüm durumu, bir nesnede depolanan anahtar / değer çiftlerinin bir koleksiyonudur Bundle
.
Varsayılan olarak Sistem örneğin Nesneleri Paket'e kaydeder.
- İçindeki metin
EditText
- A
ListView
vb. Konumunda kaydırma konumu .
Örnek durumunun bir parçası olarak kaydedilmek için başka bir değişkene ihtiyacınız varsa OVERRIDE onSavedInstanceState(Bundle savedinstaneState)
yöntemini kullanmalısınız.
Örneğin, int currentScore
bir GameActivity'de
Verileri kaydederken onSavedInstanceState (Bundle savedinstaneState) hakkında daha fazla ayrıntı
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
Bu nedenle yanlışlıkla super.onSaveInstanceState(savedInstanceState);
varsayılan davranışı çağırmayı unutursanız,
yani EditText'teki Metin kaydedilmez.
Etkinlik durumunu geri yüklemek için hangisi seçilir?
onCreate(Bundle savedInstanceState)
VEYA
onRestoreInstanceState(Bundle savedInstanceState)
Her iki yöntem de aynı Bundle nesnesini alır, bu nedenle geri yükleme mantığınızı nereye yazdığınız önemli değildir. Tek fark, onCreate(Bundle savedInstanceState)
yöntemde, ikinci durumda gerekli olmadığında boş bir denetim vermek zorunda kalacağınızdır. Diğer yanıtlarda zaten kod parçacıkları var. Onlara başvurabilirsiniz.
OnRestoreInstanceState (Bundle savedinstaneState) hakkında daha fazla ayrıntı
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from the saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
}
super.onRestoreInstanceState(savedInstanceState);
Sistem varsayılan olarak Görünüm hiyerarşisini geri yükleyecek şekilde çağırın
Bonus
onSaveInstanceState(Bundle savedInstanceState)
Kullanıcı Faaliyet geri gelmek niyetinde yalnızca sistem tarafından çağrılır. Örneğin, App X kullanıyorsunuz ve aniden bir çağrı alıyorsunuz. Arayan uygulamasına geçip X uygulamasına geri dönersiniz. Bu durumda onSaveInstanceState(Bundle savedInstanceState)
yöntem çağrılır.
Ancak bir kullanıcı geri düğmesine basarsa bunu göz önünde bulundurun. Kullanıcının Aktiviteye geri dönmeyi amaçlamadığı varsayılır, dolayısıyla bu durumda onSaveInstanceState(Bundle savedInstanceState)
sistem tarafından çağrılmaz. Verileri kaydederken tüm senaryoları göz önünde bulundurmanız gerektiğini unutmayın.
İlgili bağlantılar:
Demo varsayılan davranış
Android Resmi Belgeler .