Instance State Nedir, Ne Zaman Kullanılır?

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);
    }




Android “Uygulamayı Puanla” Butonu Ayarlama

Android uygulamaları içinde en çok kullanılan kod bloklarından biri de kullanıcının uygulamayı puanlamak için kullanıcıyı Google Play Store sayfasına yönlendiren kod blokudur. Aşağıdaki kodu, kopyalayıp yapıştırarak kullanıcınızı uygulamanızın Google Play sayfasına yönlendirebilirsiniz.

Uri uri = Uri.parse("market://details?id=" + getPackageName());
            Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
            // To count with Play market backstack, After pressing back button,
            // to taken back to our application, we need to add following flags to intent.
            goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            try {
                startActivity(goToMarket);
            } catch (ActivityNotFoundException e) {
                startActivity(new Intent(Intent.ACTION_VIEW,
                        Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
            }




Telefon Rehberi

Java ve MySQL Server ile yazılmış basit bir telefon rehberi uygulamasıdır. Projeye GitHub üzerinden aşağıdaki linkten ulaşabilirsiniz.

https://github.com/saitorhan/Telefon-Rehberi