Ekranın yan dönmesi gibi durumlarda uygulama baştan başlatılıyor. Bu yüzden de tanımlanan değişkenleri saklamak gerekiyor. Bunun için Persistent ve Parcelable olarak iki yöntem var. Bu yazıda persistent kullanımını göstereceğim. Fakat şunuda söylemeliyim bu yöntem diğer yönteme göre daha yavaş. Diğer yöntemle birde nesneleride saklayabiliyorsunuz.
Bu uygulamada ekrana bir tane textview bir tanede button koyuyoruz.
MainActivity.java
package com.osmananilozcan.kalicidegiskenler; import android.os.PersistableBundle; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { int sayac = 0; Button btnSayac; TextView tvSayac; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvSayac = findViewById(R.id.tvSayac); // Bir değişiklik olduysa burası çalışacak. if (savedInstanceState != null) { sayac = savedInstanceState.getInt("sayac"); tvSayac.setText("Sayaç: " + sayac); } else { // Bir değişiklik olmadıysa yani uygulama ilk kez açıldığında çalışacak yer. sayac = 0; } btnSayac = findViewById(R.id.btnSayac); btnSayac.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sayac++; tvSayac.setText("Sayaç: " + sayac); } }); } // protected olmasına dikkat edin. @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // Değişen değeri buradan alıyor. If içerisinde burada verilen etiket ile çağırılıyor. outState.putInt("sayac", sayac); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tvSayac" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sayaç: 0"/> <Button android:id="@+id/btnSayac" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sayacı Arttır" /> </LinearLayout>
Test etmek için uygulamayı açınca sayacı arttırın ve ekranı yan çevirin. Sayacın aynı olduğunu göreceksiniz.
Github: