Anasayfa Mobil Android Programlama Ders 32: Etkileşimden Sonuç Almak

Android Programlama Ders 32: Etkileşimden Sonuç Almak

Android Programlama Ders 32‘de StartActivityForResult metodu kullanarak etkileşimden sonucu almayı öğreneceğiz.

Bazen etkileşimi (Activity) çağırıp bir şey yapıyoruz ve sonucu almamız gerekiyor. Mesela cep telefondan mesaj göndereceğimiz zaman gönderilecek kişiyi listeden seçiyor ve mesajı gönderiyoruz. Burada liste çağırıldığı zaman yeni etkileşimi çağırıyorsunuz ve sonuç olarak bu etkileşim size seçilen kişiyi gönderiyor.

Daha ayrıntılı buradan ve buradan  okuyabilirsiniz.

Uygulamayı oluşturup bu konuyu daha ayrıntılı inceleyelim. Uygulamamız iki ekrandan oluşacak. Birinci ekrandan ikinci ekranı çağrılacak. İkinci ekranda verileri girip birinci ekrana göndereceğiz. Mesela giriş alanında kişinin isminin girilmesini isteyeceğiz.

Yeni bir proje oluşturalım:

  • Project name: P0032_SimpleActivityResult
  • Build Target: Android 4.2
  • Application name: SimpleActivityResult
  • Package name: tr.example. SimpleActivityResult
  • Create Activity: MainActivity

Main.xml’i açalım ve ekranı oluşturalım:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">
 <Button
 android:id="@+id/btnName"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:layout_margin="20dp"
 android:text="Input name">
 </Button>
 <TextView
 android:id="@+id/tvName"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:text="Your name is ">
 </TextView>
 </LinearLayout>

Ekranda TextView ismini gösterecek ve buton ikinci etkileşimi çağrılacak.

MainActivity.java dosyasını açıyoruz ve kodu yazıyoruz.

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.TextView;

public class MainActivity extends Activity implements OnClickListener {

  TextView tvName;
  Button btnName;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tvName = (TextView) findViewById(R.id.tvName);
        btnName = (Button) findViewById(R.id.btnName);
        btnName.setOnClickListener(this);

    }

  @Override
  public void onClick(View v) {
    Intent intent = new Intent(this, NameActivity.class);
    startActivityForResult(intent, 1);
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data == null) {return;
 String name = data.getStringExtra("name");
tvName.setText("Your name is " + name);
}
}

TextView, butonu belirtiyoruz ve işletici ayarlıyoruz. OnClick metodunda Intent’i oluşturuyoruz ve ikinci etkileşimin klasını belirtiyoruz. Intent’i göndermek için startActivityForResult kullanıyoruz. StartActivityFor Result kullandığımız zaman MainActivity etkileşim NameActivity için ana etkileşim oluyor. NameActivity kapandığı zaman MainActivity etkileşimde onActivityResult metodu çalıştırılıyor. onActivityResult startActivityForResult’ın açıldığını, etkileşimin kapandığını sinyal veriyor.

startActivityForResult parametre olarak Intent ve requestCode gönderiyor. requestCode – tanımlamak için gereklidir. Bu derste onu belirleyeceğiz (requestCode = 1) ve sonraki derste onun amacını ayrıntılı açıklayacağız.

onActivityResult’a aşağıdaki verdiğim parametreleri görebiliyorsunuz:

requestCode – startActivityForResult’taki gibi tanımlayıcıdır. Onu kullanarak hangi etkileşimden (Activity) geldiğini belirtiyoruz.

resultCode – dönüş kodu. Çağrının başarılı olup olmadığını kontrol ediyor.

data – gönderen verileri Intent’i içeriyor.

requestCode ve resultCode şu anda kullanmayacağız. Gelecek derste daha ayrıntılı ilgileneceğiz. data’yı kullanarak name (İsim) nesneyi alacağız ve TextView’de değeri göstereceğiz.

name.xml ekranı oluşturalım:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
<LinearLayout
 android:id="@+id/linearLayout1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="10dp">
<TextView
 android:id="@+id/textView1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Name">
</TextView>
<EditText
 android:id="@+id/etName"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginLeft="10dp"
 android:layout_weight="1">
<requestFocus>
</requestFocus>
</EditText>
</LinearLayout>
<Button
 android:id="@+id/btnOK"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center_horizontal"
 android:text="OK">
</Button>
</LinearLayout>

Yukarıdaki kodda ekranda giriş alanında ismi gireceğiz ve Ok butonuna basacağız.

NameActivity klası oluşturuyoruz ve Manifest dosyasında onu kayıt ediyoruz:

 

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 NameActivity extends Activity implements OnClickListener {

  EditText etName;
  Button btnOK;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.name);

    etName = (EditText) findViewById(R.id.etName);
    btnOK = (Button) findViewById(R.id.btnOK);
    btnOK.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    Intent intent = new Intent();
    intent.putExtra("name", etName.getText().toString());
    setResult(RESULT_OK, intent);
    finish();
  }
}

OnClick metodunda Intent’i oluşturuyoruz ve giriş alanından (etName) verileri Intent’e yerleştiriyoruz. setResult metodu intent’i ana etkileşime (MainActivity) gönderiyor. Ve RESULT_OK parametre çağrının başarılı olduğunu belirtiyor. Bu parametre resultCode’a gönderiliyor. finish metodu kullanarak NameActivity etkileşiminin çalışmasını bitiriyoruz. Ve sonuç MainActivity’e gönderiliyor. Manifest dosyasında NameActivity etkileşimini kaydetmeyi unutmuyoruz.

Kaydedelim ve çalıştıralım. Birinci ekranı görüyoruz:

firstActivity

İsmi girmek için butona basıyoruz.

İsmi giriyoruz ve OK butonuna basıyoruz.

OmerAslan

Sonucu gösteren birinci ekranı (MainActiivity) görüyoruz.

secondActivity

 

Ders Sonu Notları:

Bu derste MainActivity’de  Intent’i oluşturduk. Intent’e (Explicit Intent– Açık niyeti) NameActivity etkileşimi belirtik. startActivityForResult metodu kullanarak Intent’i çalıştırdık. NameActivity etkileşimde giriş alanında ismi girdikten sonra OK butonuna bastık. Intent oluştu ve bu Intent girdiğimiz ismi tutuyor. setResult metodu bu Intent’i ana etkileşime (MainActivity) gönderiyor. MainActivity etkileşimde alan sonucu onActivityResult metodu gerçekleşiyor. Burada Intent’i açıyoruz ve gönderen verileri TextView kullanarak ekranda gösteriyoruz.

Sonraki derste onActivityResult metodunda bulunan requestCode ve resultCode parametreleri detaylı inceleceğiz.