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.