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>
Kolay gelsin.
