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.