Xamarin.Android – Ekranlar arası parametre göndermek/almak

9 Kas

Merhaba arkadaşlar,
Burada ki yazımda Xamarin – Yeni aktivite başlatmak | Başka ekrana geçiş yapmak yeni bir ekrana nasıl geçiş yapılır anlatmıştım.

Bu yazımda ise yeni ekrana geçiş yaparken nasıl veri göndeririz ve bu verileri yeni ekranda nasıl çekip kullanabiliriz anlatmaya çalışacağım.

Önceki yazıda anlattım projeden devam edeceğim.
Kısaca özetliyim, Projede MainActivity ve TestActivity adında 2 tane Acitivty var. Bunlara karşılık gelen 2 adette layoutum yani .axml dosyalarım var.

Başlayalım;

Yapacağım işlem temel olarak : Main.axml dosyasında ki butona tıkladığımda Text.axml ekranını açıcam ve burada TextViewların içini Main’den göndereceğim verilerle dolduracağım.

MainActivity.cs classımda yeni aktivity açacak olan butonumum click eventı altına şu kodları yazıyorum;

private void BtnNewActivity_Click(object sender, System.EventArgs e)
        {
            //TestActivity çekilir;
            var testActivity = new Android.Content.Intent(this, typeof(TestActivity));
            
            //+Parametre ile gönderilecek veriler;
            testActivity.PutExtra("testInt", 1234);
            testActivity.PutExtra("testStr", "Test string verisi");
            //-

            //TestActivity açılır.
            StartActivity(testActivity);
        }

.PutExtra() methodu ile açılacak olan yeni activity classlarına veri gönderebiliyoruz. Ben örnek olarak int ve string veri gönderdim.

Şimdi bu verileri TestActivty.cs clasında çekelim;

TestActivity‘de bu verileri göstermek için Test.axml ekranına 2 adet daha TextView ekledim;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="TEST EKRANINA HOŞ GELDİNİZ"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtTest" />
  <TextView
        android:text=""
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtTestInt" />
  <TextView
        android:text="TEST EKRANINA HOŞ GELDİNİZ"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtTestStr" />
</LinearLayout>

TestActivity.cs

[Activity(Label = "TestActivity")]
    public class TestActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            //+ Parametre ile gönderilen veriler çekilir.
            int testInt = Intent.GetIntExtra("testInt",0);
            string testStr = Intent.GetStringExtra("testStr");
            //-

            //Burada hangi Layout'un yükleneceği belirtiliyor.
            SetContentView(Resource.Layout.Test);

            TextView txtTestInt = FindViewById<TextView>(Resource.Id.txtTestInt);
            TextView txtTestStr = FindViewById<TextView>(Resource.Id.txtTestStr);

            //textler doldurulur.
            txtTestInt.Text = testInt.ToString();
            txtTestStr.Text = testStr.ToString();
        }
    }

Intent.GetIntExtra() ve Intent.GetStringExtra() methodları ile gönderdiğim verileri çekmiş oldum.
Intent.GetIntExtra(“testInt”,0) = testInt adında verim olduğunu, böyle bir veri bulamazsa defaultValue olarak 0(sıfır) atmasını belirtiyoruz.

Intent.GetStringExtra(“testStr”) = Burada ise bizden defaultValue istemiyor çünkü string veri yoksa zaten null olarak atanır.

//Not : Null veriyi text atayamazsınız. Bundan dolayı atamalardan önce kontrol ettirebilirsiniz.

İşlemler bu kadardır;

İyi çalışmalar.

Bir Cevap Yazın