Basit bir Android uygulamasından örnek vererek önce problemi bir anlayalım. Elimizde bir buton ve bir de Textview var ve biz butona her bastığımızda ekrandaki sayı sayaç görevi görerek 1 artıyor.
public class MainActivity extends AppCompatActivity {
int sayac=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tvSayac = (TextView) findViewById(R.id.textViewSayac);
Button btn = (Button) findViewById(R.id.buttonTetikle);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sayac++;
tvSayac.setText(String.valueOf(sayac));
}
});
}
}
Ama ekranı yan çevirdiğimizde (orientation) değişiyor ve değişkenlerin değerleri bir anda sıfırlanarak sayacımız da sıfırlanıyor.
Şimdi orientation değiştiğinde gerçekleşen sıfırlamayı, sayac değişkenimiz için engellemek için kodlarımızı güncelleyeceğiz.
Not: Android sürümüne ve kullanılan sanal cihaza göre orientation değişimi varsayılan değeri farklılık gösterir. Eğer ekranı yan çevirdiğinizde uygulamanız da telefonla birlikte dönmüyorsa AndroidManifest.xml dosyasında aşağıdaki düzenlemeyi yapın:
...
<activity android:name=".MainActivity" android:screenOrientation="sensor">
...
Şimdi gelelim sayaç değişkeninin değerini orientation değiştiğinde de korumaya:
public class MainActivity extends AppCompatActivity {
int sayac;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tvSayac = (TextView) findViewById(R.id.textViewSayac);
Button btn = (Button) findViewById(R.id.buttonTetikle);
if (savedInstanceState != null) {
sayac = savedInstanceState.getInt("SayacKey");
tvSayac.setText(String.valueOf(sayac));
}
else {
sayac=0;
}
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sayac++;
tvSayac.setText(String.valueOf(sayac));
}
});
}
@Override
public void onSaveInstanceState (Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putInt("SayacKey",sayac);
}
}
onSaveInstanceState metodunu override ederek key/value çiftleri altında istediğimiz değerleri saklayabiliriz. Ekran yan döndürüldüğünde tetiklenecek bu eylemi sonrasında tetiklenen onCreate metodu takip eder ve onCreate metodunun Bundle savedInstanceState parametresi de bu sayede değişken değerlerimizi saklayarak tekrar uygulama içerisindeki kontrollere aktarabilmemizi sağlamış olur.