Mobil Programlama

Android

DERS PROGRAMI
Android 301 Ders Programı

Başka Bir Activity'yi Başlatmak

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

​Bu eğitim içeriğinde kullanıcının bir düğmeye basmasıyla nasıl başka bir Activity'yi açacağınızı öğreneceksiniz. Esasında bu konu Android'in en önemli bileşenlerinden Intent'e giriş niteliği taşıyor.

Bu içeriği okurken uygulayarak devam etmek için öncelikle basit bir Android projesi oluşturun. Bu projenin MainActivity layout dosyasında (activity_main.xml) bir tane metin kutusu (EditText) ve düğme (Button) oluşturun. Bu belgenin sonuna geldiğinizde, bu uygulamada kullanıcının metin kutusuna girdiği değeri başka bir Activity'de gösterebileceksiniz. Öncelikle diğer Activity'ye geçmemize yarayacak düğme ile ilgili işlemleri halledelim.

 

Gönder düğmesine tepki verme

Uygulamanızın activity_main.xml isimli layout dosyasında bir düğme (Button) olduğunu farz edelim. Bu düğmenin tıklanma (dokunma) eylemine yanıt vermek için activity_main.xml dosyanızı açın ve android:onClick özelliğini <Button> elemanına ekleyin:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_gonder"
        android:onClick="mesajGonder" />

android:onClick özelliğinin değeri olan "mesajGonder" Activity'niz içinde, kullanıcı düğmeye bastığında sistemin çağıracağı metodun adı.

MainActivity.java dosyasını açın (/src dizinindedir) ve şu metodu MainActivity sınıfının içine ekleyin:

/** kullanıcı gönder düğmesine basınca çağırılır */
public void mesajGonder(View view) {
    // düğmeye yanıt verecek bir şeyler
}

Sistemin android:onClick'e verilen metod adıyla buradaki metod adını eşleştirebilmesi için metod imzası tıpkı burada gösterildiği gibi olmalıdır. Metod mutlaka

  • public olmalı
  • void dönüş değeri içermeli
  • tek parametre olarak View almalı (bu View tıklanmış olan View oluyor)

Bundan sonraki aşamada, bu metodun içini metin kutusunun içeriğini okumak ve girilen metni diğer Activity'ye göndermek için dolduracağız.

 

Intent oluşturma

Bir Intent, farklı bileşenler arasında (iki Activity gibi) çalışma zamanında bağlama (runtime binding) sağlayan nesnedir. Intent, bir uygulamanın "bir şeyi yapmaya niyetlenmesini" ifade eder. Intent'leri çok çeşitli görevlerde kullanabilirsiniz fakat başka bir Activity'yi başlatma işlemlerinde sıkça kullanılırlar.

mesajGonder() metodunun içinde MesajGosterActivity isimli Activity'yi başlatmak için bir Intent oluşturun:

Intent intent = new Intent(this, MesajGosterActivity.class);

Bu işlem Intent sınıfını import etmenizi gerektirir:

import android.content.Intent;

Öneri: Android Studio'dayken Alt + Enter tuşlarına basarak eksik sınıfları import edebilirsiniz.

Burada kullanılan yapılandırıcı metod iki parametre alıyor:

  • İlk parametre olarak Context (this kullandık çünkü Activity sınıfının, Context'in alt sınıfıdır)
  • Sistemin Intent'i teslim edeceği bileşenin Class ismi. (bu örnekte düğmeye tıklayınca başlayacak olan Activity'nin sınıf adı)

NOT: Henüz MesajGosterActivity isimli Activity'yi oluşturmadığınız için IDE'niz hata verecektir. İlerleyen bölümlerde oluşturacaksınız; okumaya ve uygulamaya devam edin.

Bir Intent, "ekstra veri" olarak isimlendirilen ve anahtar-değer 8key-value) veri tiplerini tutan koleksiyonları taşır. putExtra() metoduyla ilk parametre olarak anahtarı, ikinci parametre olarak değeri alır.

Sıradaki Activity'nin ekstra veriyi sorgulayabilmesi(*) için Intent'inizin ekstra verisi olarak kullanmak için sabit bir anahtar (key) tanımlamalısınız. Bunun için MainActivity sınıfınızın en üstüne EXTRA_MESSAGE tanımlamasını yapabilirsiniz:

public class MainActivity extends ActionBarActivity {
    public final static String EXTRA_MESSAGE = "org.tcellgy.android.kitaplik.MESAJ";
    ...
}

Anahtarlara uygulamanızın paket adını ön ek olarak vermek iyi bir alışkanlıktır. Böylece onları eşsiz (unique) yaparsınız ve uygulamanız diğer uygulamalarla etkileşime geçebilir.

 

İkinci Activity'yi başlatma

Bir Activity'yi başlatmak için startActivity() metodunu çağırın ve bu metoda Intent'inizi geçirin. Sistem bu çağrıyı alacak ve Intent'te belirttiğiniz Activity'nin bir örneğini (instance) başlatacaktır.

Bu yeni kodla beraber Gönder düğmesi tarafından çağrılan mesajGonder() metodu şöyle olacaktır:

/** kullanıcı gönder düğmesine basınca çalışır */
public void mesajGonder(View view) {
    Intent intent = new Intent(this, MesajGosterActivity.class);
    EditText editText = (EditText) findViewById(R.id.edittext_mesaj);
    String mesaj = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, mesaj);
    startActivity(intent);
}

Bu kodun düzgün çalışması için MesajGosterActivity sınıfını oluşturmanın zamanı geldi.

 

İkinci Activity'yi oluşturma

Android Studio kullanarak yeni Activity oluşturmak için:

  1. File menüsünden New > Activity > Blank Activity seçeneğini seçin.
  2. Activity ile ilgili ayrıntıları doldurun:
    • Activity Name: MesajGosterActivity
    • Layout Name: activity_mesaj_goster (Activity Name'i yazarken kendiliğinden değişir)
    • Title: Mesajlar
    • Hierarchical Parent: gy.activityex.MainActivity
  3. Finish'e basın.

/src dizininde oluşan MesajGosterActivity.java isimli dosya şunun gibi olacaktır:

package gy.activityex.MainActivity;


import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MesajGosterActivity extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_mesaj_goster);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.mesaj_goster, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

Activity'nin tüm alt sınıfları onCreate() metodunu mutlaka gerçeklemelidir - implemente etmelidir. Sistem bu metodu Activity'nin yeni bir örneğini (instance) oluştururken çağırır. Bu metot setContentView() metodu ile Activity layout'unu tanımlamanız gereken yerdir. Ayrıca Activity bileşenleriyle ilgili ilk ayarları yapmanızı önerdiğimiz yerdir.

 

Intent'i alma

Her Activity bir Intent tarafından çağrılır - kullanıcı nerede gezinirse gezinsin. Activity'nizde getIntent() metodunu kullanarak onu başlatan Intent'i elde edebilir ve içinde taşıdığı verilere ulaşabilirsiniz.

MesajGosterActivity sınıfının içindeki onCreate() metoduna gelip, az önce MainActivity'nin teslim ettiği Intent'i ve ekstra mesajı şu şekilde alabilirsiniz:

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

 

Gelen mesajı gösterme

Artık ilk Activity'den gelen Intent'e erişebiliyoruz. Şimdi o Intent ile gelen mesajı MesajGosterActivity'de gösterelim. Bunun için MesajGosterActivity'nin layout dosyasını biraz düzenlememiz gerekiyor. Şu anki hali şöyle:



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="org.tcellgy.android.kitaplik.MesajGosterActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

Buradaki TextView üzerinde bazı değişiklikler yapacağız: Ona ulaşabileceğimiz bir kimlik numarası (ID) vereceğiz. Şöyle güncelleyebilirsiniz:

<TextView
        android:id="@+id/text_gelenmesaj"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

Buradaki android:id="@+id/text_gelenmesaj" satırına dikkat edin. Sadece bu TextView'ın ismi "text_gelenmesaj" oldu. 

TextView'a isim verdiğimize göre artık Intent'ten aldığımız mesajı gösterebiliriz. Bunun için MesajGosterActivity.java dosyanızdaki onCreate() metodunu şöyle özelleştirmek yeterli:

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_mesaj_goster);
		
		Intent intent=getIntent();
		String mesaj=intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
		
		TextView textView=(TextView) findViewById(R.id.text_gelenmesaj);
		textView.setText(mesaj);
	}

Uygulamanızı çalıştırdığınızda gelen metin kutusuna bir şeyler yazın ve "Göster" düğmesine basın. Sonuç aşağıdaki gibi olacaktır:

Ekran 1

Örnek projeyi ekranın yukarı sol tarafındaki bölümden indirebilirsiniz.

 

Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış hâlidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.

Bu eğitim içeriğinin orijinal hâline buradan ulaşabilirsiniz: Starting Another Activity