Konunun içeriğinin daha iyi anlaşılması açısından şöyle bir senaryo üzerinden ilerleyebiliriz:
Örnek ekranımızda bir adet TEXTBOX ve bir adet LABEL var. Butona tıklandığında TEXTBOX değerini alıp LABELe yazdırılıyor. İlk ekranımızda göründüğü gibi “Sait ORHAN” yazısı labele yazdırılmış. Bu durumda iken telefonun yönünü değiştirilmesi durumunda label değeri tasarım aşamasında verilen değere dönüyor. Örneğimizde “HELLO WORLD!” metnine döndüğü gibi ve telefon yönü eski durumuna getirilse bile atanan değer geri gelmiyor.
Bu durumun nedeni Android‘in kullanıcıdan alınan değerleri tutup performansa olumsuz etkisi olmaması için statik değer olduğu farzedilen değerleri hafızaya almamasıdır.
Bu sorunun çözmenin yolu; telefonun yönü değiştiğinde sırası ile onSaveInstanceState ve onRestoreInstanceState olayları tetikleniyor.
onSaveInstanceState metodu içerisinde bu şekilde kaybolan değerler Bundle tipindeki parametreye alınarak koruma altına alınır.
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("name", labelName.getText().toString()); }
onRestoreInstanceState metodu içinde de onSaveInstanceState metodunda kaydedilen değerler alınarak ilgili kontrollere atanır.
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); String name = savedInstanceState.getString("name"); labelName.setText(name); }