Android’te sayfalar arasında veri aktarmak için birden fazla yöntem kullanılmaktadır. Sıklıkla kullanılan bir tanesi de bir Bundle oluşturup verilerimizi onun içine depolamak, Bundle‘ı sayfa geçişi için kullanılan Intent‘e eklemek ve hedef sayfadan da Bundle‘ı alıp, içindeki verileri kullanmak. Php’de kullandığımız GET ve POST gibi.
Bundle kullanarak byte, byte array, char, boolean, String, int, long gibi temel türleri gönderebiliriz. Eğer bir Object göndermek istersek de, classımız Parcelable[0] ya da Serializable[1] interface’lerinden birini implement etmelidir.
Örnek bir uygulama üzerinden gidecek olursak, ilk sayfada kullanıcıya ad, yaş ve TC kimlik numaraları soralım ve bunları ikinci bir sayfaya gönderip orada gösterelim. Bunun için sayfaya 3 tane EditText ekleyelim.
İlk sayfada formdaki değerleri almak için aşağıdaki satırları kullanıyoruz.
strName = etName.getText().toString().trim(); age = Integer.parseInt(etAge.getText().toString().trim()); strTC = etTC.getText().toString().trim();
Şimdi sıra geldi elimizdeki değerleri ikinci sayfaya göndermeye. Bunun için Bundle class’ından bir instance oluşturuyoruz ve yukarıda almış olduğumuz değerleri bu nesneye ekliyoruz. String eklemek için putString(), int eklemek için putInt()… gibi metodlardan uygun olanları kullanıyoruz. İlk sayfanın kodu aşağıdaki gibi şekillendi.
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Main extends Activity { /** Degiskenler */ public static String NAME = "name"; public static String AGE = "age"; public static String TC = "tc"; private EditText etName, etAge, etTC = null; private String strName, strTC = null; private int age = -1; private Button btnSubmit = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { /** Formdaki nesnelerin atanmasi */ etName = (EditText) findViewById(R.id.etName); etAge = (EditText) findViewById(R.id.etAge); etTC = (EditText) findViewById(R.id.etTC); btnSubmit = (Button) findViewById(R.id.btnSubmit); btnSubmit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { clickedSubmit(); } }); } private void clickedSubmit() { /** Formdan verileri alalim */ strName = etName.getText().toString().trim(); age = Integer.parseInt(etAge.getText().toString().trim()); strTC = etTC.getText().toString().trim(); try { /** Bundle olusturup verileri bundle'a ekleyelim */ Bundle extras = new Bundle(); extras.putString(NAME, strName); extras.putString(TC, strTC); extras.putInt(AGE, age); /** Intent olusturalim */ Intent intent = new Intent(); /** Bundle'i intente ekleyelim */ intent.putExtras(extras); /** Yeni sayfayi cagiralim */ intent.setClass(getApplicationContext(), Second.class); startActivity(intent); } catch (Exception e) { e.printStackTrace(); } } }
İkinci sayfaya geçip ilk sayfadan gönderilen değerleri almak için de yeni bir Bundle nesnesi oluşturalım. Bu sefer new operatörü ile değil, getIntent().getExtras() ile bu sayfaya gönderilmiş olan ekstra değerleri içeren nesnemizi oluşturuyoruz. Her bir değeri almak için de Bundle classının getString(“key”), getInt(“key”), getBoolean(“key”)… gibi metodlarını kullanacağız. İkinci sayfanın kodu aşağıdaki gibi şekillendi.
import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class Second extends Activity { private TextView tvName, tvAge, tvTC = null; private String strName, strTC = null; private int age = -1; private Bundle extras = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); init(); } private void init() { /** Textview atamalari */ tvName = (TextView) findViewById(R.id.tvName); tvAge = (TextView) findViewById(R.id.tvAge); tvTC = (TextView) findViewById(R.id.tvTC); /** Renkleri degistirelim */ tvName.setTextColor(Color.GRAY); tvAge.setTextColor(Color.GRAY); tvTC.setTextColor(Color.GRAY); /** Bir onceki sayfadan verileri alalim */ extras = getIntent().getExtras(); /** Verileri alip atamalari yapalim */ strName = extras.getString(Main.NAME); strTC = extras.getString(Main.TC); age = extras.getInt(Main.AGE); /** Aldigimiz verileri ekranda gosterelim */ tvName.setText(strName); tvAge.setText(String.valueOf(age)); tvTC.setText(strTC); } }
Uygulamayı çalıştırdıktan sonra da aşağıdakine benzer bir ekran görüntüsü elde ediyor olmalıyız.
Intent kullanarak sayfalar arasında Object göndermeye de başka bir yazıda değineceğim.
————————–
[0] -> http://developer.android.com/reference/android/os/Parcelable.html
[1] -> http://developer.android.com/reference/java/io/Serializable.html
“Android :: Sayfalar Arası Veri Aktarımı – 1” yazısına 11 yorum yapılmış.