5.00 / 1 oy

Android'de Orientation değiştiğinde her şeyin sıfırlanmasını engellemek

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.

android sayaç

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.

android orientation

Ş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.
 

utku33

22.04.2020 02:33

Bu soru 1 kez yanıtlandı.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
Android'de Orientation değiştiğinde her şeyin sıfırlanmasını engellemek

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.