Farklı Yollarla Tıklanma İşlemi

Selamlar.Bugün sizlere farklı yollarla tıklanma işlemlerinin nasıl yapabileceğimizi anlatacağım.

Aslında hepimizin bildiği bir yol var .

Tabiki de  .setOnClickListener()… 

Ama şöyle bir dezavantajımız var.Buton sayısı arttığı zaman tıklamanın dinleme işlemi de artıyor ve uygulamanın çökmesine sebep oluyor.Peki bunu başka yollarla yapabilir miyiz? Tabiki de evet.Ama önce .setOnClickListener() ile nasıl yaptığımızı gösterelim.Diğer yollarla olan farkını anlamamıza yardımcı olur.

 

1) .setOnClickListener() Yardımıyla Tıklama İşlemi Yapma
activity_main.xml
 
     <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  • Örnek oluşturması açısından layout kısmında basit,özelliği olmayan bir buton oluşturdum.

 

MainActivity.class
 
       Button button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
            }
        });
  • Butonun tanımlamasını yapıyoruz ve ona   .setOnClickListener() ile tıklama olacağını belirtiyoruz.Fonksiyonun içerisineyse butona tıklandığında yapılacak işlemleri yazıyoruz.
  • Basit bir yol.
  • Buton sayısı artınca malesef kod karmaşası artıyor.Okunabilirlik azalıyor.Bu yüzden buton sayısı çok olduğunda önerilmez.

 

 

2) onClick Metotuyla Tıklama İşlemi Yapma
activity_main.xml
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="button_tiklama"/>
  • Burada dikkat edildiği gibi id vermemize gerek kalmıyor.Onun yerine android:onClick özelliğini kullanıyoruz. Yanınaysa oluşturmamız gereken metotun ismini yazmıyoruz.

 

MainActivity.class
 
    public void button_tiklama(View view) {
        
    }
  • Butona erişeceğimiz sınıfın içerisinde android:onClick ismine ne yazdıysak o isimde metot oluşturuyoruz.Artık butona tıklanıldığında ne işlem yaptıracaksak bu metotun içerisine yazıyoruz.
  • Metotu bir yerden çağırmıyoruz.Butona tıklama işlemi olduğunda otomatik olarak bu metotun içerisindekiler çalışıyor.

 

 

3) İnterface Kullanarak Kendi Sınıfında Tıklama Yaptırma
activity_main.xml
 
      <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  • Yine basit olarak bir buton tanımlıyoruz ve id veriyoruz.

 

MainActivity.class
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  • Oluşturduğumuzu activity sınıfımıza View.OnClickListener sınıfındaki tıklanma işlemini kullanacağımızı belirtiyoruz.Bunu yazdıktan sonra bize hata veriyor ve aşağıdaki gibi bir sınıf oluşturmamızı istiyor.(Alttaki koda değil onun altındaki koda bakın)

 

MainActivity.class
 
       Button button=findViewById(R.id.button);
        button.setOnClickListener(this);
  • Burada bir farklılık var.Yukarıda .setOnClickListener yazınca içerisine new OnClickListener….. yazmıştık oysa ki burada this yazıyoruz.Neden derseniz şöyle açıklayayım.Biz zaten bu sınıfımıza View.OnClickListener sınıfını implement ettik yani o sınıftaki tıklama metotunu kullanacağımızı belirttik.O yüzden metotun içerisine this yazıyoruz.Yani bir üstteki tıklanma metotunu,fonksiyonunu kullan diyoruz.Zaten biz sınıfımıza implements View.OnClickListener yazınca bize hata verecek ve şu metot eksik lütfen ekleyin diyecek.Bizde aşağıdaki metotu ekleyeceğiz.
  • Yukarısı önemli tekrar okuyalım 🙂

 

MainActivity.class
 
    @Override
    public void onClick(View v) {
        if (v.getId() == button.getId()) {
        }
    }
  • View.OnClickListener sınıfını implement ettikten sonra yukarıdaki fonksiyon oluşacak.Bunun içerisinde de view nesnesiyle buton idsinin eş olup olmadığını kontrol ettikten sonra işlemlerimizi yaptıracağız.
  • Bütün tıklanma işlemleri burada olacağı için karmaşa bir nebze düşecek.
  • Not : Butonu global olarak tanımlayın.Yoksa burada ulaşamıyoruz.

 

 

4) İnterface Kullanarak Başka Bir Sınıfta Tıklama Yaptırma

 

Aslında mantık bir üsttekiyle tamamen aynı.Sadece farklı olan şey tüm tıklanma ve tıklandıktan sonra olacak işlemleri başka bir sınıfta yapıyor olmak.Daha düzenli ve daha sağlıklı.

 

activity_main.xml
 
       <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
  • Butonumuzu tanımlayıp id veriyoruz.

 

tiklama_sinifi.class
 
public class tiklama_sinifi implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        if(v.getId()==v.findViewById(R.id.button).getId()){
            
        }
    }
}
  • Burada başka boş bir sınıf oluşturuyoruz.(Ben ismine tiklama_sinifi dedim)
  • Daha sonra sınıfa yine  View.OnClickListener sınıfını implement ediyoruz.Yani bu sınıftaki tıklama işlemini kullanacağımızı belirtiyoruz.
  • Daha sonra bize eklenmesi gereken metot var diye hata veriyor ve o metotu ekliyoruz.
  • Son olarakta view nesnesiyle buton idsinin eş olup olmadığını kontrol ettiriyoruz.Eğer tıklama işlemi butondan geliyorusa yapılacakları altına yazıyoruz.
  • Gelelim Main sınıfımıza.

 

MainActivity.class
 
findViewById(R.id.button).setOnClickListener(new tiklama_sinifi());
  • findViewById ile hangi butona erişeceğimizi,
  • setOnClickListener ile tıklama işlemi yapacağımızı,
  • ve bunu da tiklama_sinifi’dan oluşturduğumuz bir nesne ile yapacağımızı belirtiyoruz.

 

Benim bildiğim ve açıklamaya çalıştığım 4 farklı tıklanma işlemi var.(Tabi çok daha fazla vardır).

Ben 4.olanı kullanmaya özen gösteriyorum.Çünkü biraz uygulamamız büyüdüğünde,kod sayısı arttığında,arayüzdeki tasarımlar butonlar vs arttığında çok fazla karmaşıklık ortaya çıkıyor.Bu yolu kullanarak tıklanma ile alakalı işlemlerini başka bir sınıfta yapıyorum ve o sınıfın sadece tıklanma olduğunu yani tıklanma ile alakalı bir sorun olduğunda 10larca sınıfta kaybolmaktansa tek bir sınıfta kaybolmayı göze alıyorum. Ayrıca refactor işlemine de olanak sağlıyorum.

Okuduğunuz için teşekkür ederim başarılar dilerim…

 

Kaynakça :