Android: Olay Dinleyiciler (Event Listeners)

Bu yazıda Android ile kullanılan  olay dinleyicilerini (event listeners) farklı yöntemler kullanarak varyasyonlarını inceleyeceğiz.

Olay dinleyicilerine kısaca bir örnek vermem gerekirse; uygulamamızın ekranındaki bir butona tıklama (onClick) olayını verebilirim. Biz bu örneğimizde onClick olayı üzerinden gideceğiz ve bunla ilgili 5 adet yöntem inceleyeceğiz.

Adımları takip edebilmek için Eclipse veya hangi IDE’yi kullanıyorsanız onunla boş bir  Android projesi oluşturabilirsiniz.

Aşağıda res/layout/activity_main.xml dosyasına (siz farklı isimlendirmiş olabilirsiniz.) uygulamamızın tasarım layout’una bir adet TextView ve Button kontrolleri ekledim.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <TextView android:id="@+id/textview1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Butona Tıkla"
    android:textSize="20dp" />
  <Button android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button" />
</LinearLayout>

Ayrıca bu yöntemleri kullandığımda Eclipse tarafından eklenen paketlerde aşağıdadır.

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

 

Üye Sınıfı (Member Class)

MainActivity içindeki OnClickListener arayüzü uygulanan HandleClick üye sınıfı ile kullanımı:

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// setOnClickListener ile tetiklenecek üye sınıfı örnekleyip veriyoruz.
		findViewById(R.id.button1).setOnClickListener(new HandleClick());
	}
	private class HandleClick implements OnClickListener{
	    public void onClick(View arg0) {
	      Button btn = (Button)arg0;
	      // TextView kontrolünün referansını alıyoruz.
	      TextView tv = (TextView) findViewById(R.id.textview1);
	      // TextView'ı günceliyoruz.
	      tv.setText(btn.getText()+"'a tıkladın.");
	    }
	}	
}

Arayüz Tipi (Interface Type)

handleClick değişkenine atanan olay:

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// olay dinleyici eklemek için handleClick değişkeni kullanılıyor.
		findViewById(R.id.button1).setOnClickListener(handleClick);		
	}
	private OnClickListener handleClick = new OnClickListener(){		
		    public void onClick(View arg0) {		
		      Button btn = (Button)arg0;		
		      TextView tv = (TextView) findViewById(R.id.textview1);		
		      tv.setText(btn.getText()+"'a tıkladın.");		
		    }		
	};
}

Anonim İç Sınıf (Anonymous Inner Class)

Üye sınıfına benzer kullanımdır. Ama bu sınıfın ismi yoktur.

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.button1).setOnClickListener(new OnClickListener(){
		      public void onClick(View arg0) {
		        Button btn = (Button)arg0;
		        TextView tv = (TextView) findViewById(R.id.textview1);
		        tv.setText(btn.getText()+"'a tıkladın.");
		      }
		});
	}
}

Activity sınıfımıza Arayüz Uygulama(Implementation in Activity)

MainActivity sınıfımıza arayüz uygulayarak kullanım:

public class MainActivity extends Activity implements OnClickListener{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.button1).setOnClickListener(this);		      
	}
	public void onClick(View arg0) {
	    Button btn = (Button)arg0;
	    TextView tv = (TextView) findViewById(R.id.textview1);
	    tv.setText(btn.getText()+"'a tıkladın.");
	}
}

OnClick olayı için tasarım ekranında özellik atamak

Bu özelliği Android 1.6 ve sonrası desteklemektedir (API Level 4 ve yukarısı).

public class MainActivity extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);			      
	}
	public void HandleClick(View arg0) {
	    Button btn = (Button)arg0;
	    TextView tv = (TextView) findViewById(R.id.textview1);
	    tv.setText(btn.getText()+"'a tıkladın.");
	}
}

 

Layout dosyasında android:onClick özelliğini ekliyoruz.

 

  <Button android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button" android:onClick="HandleClick"/>

Bu yöntemle birden fazla butonu da tek bir metoda bağlayabiliriz.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <TextView android:id="@+id/textview1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Bir butona tıklayın."
    android:textSize="20dp"/>
  <LinearLayout android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
    <Button android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Buton 1"
      android:onClick="HandleClick"/>
    <Button android:id="@+id/button2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Buton 2"
      android:onClick="HandleClick"/>
    <Button android:id="@+id/button3"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Buton 3"
      android:onClick="HandleClick"/>
  </LinearLayout>
</LinearLayout>

android-olay-dinleyici-ornek

 

Kolay gelsin.

Yayınlayan

Yusuf Doru

İstanbul'da yaşıyor. Web ve masaüstü ortamlarında çalışmalar yapıyor. Araştırıyor, geliştiriyor. Kendine ait kişisel blogu var. Her ne kadar .NET dillerine ilgisi olsa da, açık kaynaklı programlama dillerinde de kendini geliştirmeye devam ediyor.

“Android: Olay Dinleyiciler (Event Listeners)” üzerine bir yorum

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir