2011-08-16 21 views
6

Android'de, buton tıklamaları ile uğraşmanın üç yaygın yolu var gibi görünüyor, yöntemler arasında ne kadar fark var? Ve bunlardan herhangi biri bir şekilde 'daha iyi' midir? Ben görmeye devamAndroid'de tıklanan bir düğme nasıl ele alınır?

üç yöntem vardır:

Anonim sınıf

o kimliğin tarafından Bul düğmesi, daha sonra yeni bir anonim sınıf örneğin setOnClickListener geçmek onCreate içinde

findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // .. Whatever 
    } 
}); 

OnClickListener

OnClickListener uygulamak ve setOnClickListener için this geçmesi uygulamak, daha sonra düğme numarası, örneğin, temel bir anahtar statment kullanımı onCreate

findViewById(R.id.myButton).setOnClickListener(this); 

ve

public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.myButton: 
      // ... whatever ... 
      break; 
    } 
} 

Kullanım onClick XML vasıf etkinlik XML düzende

, bunun yerine düğme bir kimlik verme, böyle onClick kullanmak onClick

gibi uygulamak :

O zaman bu gibi Acitiviy bir buttonClicked yöntemi vardır: Ben XML özelliğini kullanma eğiliminde anda

public void buttonClicked(View v) { 
    // ... whatever ... 
} 

, ancak kod az miktarda içerir çünkü sadece. Diğer yöntemleri ne zaman kullanmalıyım?

+0

+1. Sadece Android'i öğreniyorum ve onClick'in özniteliğinin farkında değildim. – Mike

cevap

4

İlk ikisi klasik yaklaşımlardır. Hangisini tercih ederseniz, Android sorudan ziyade genel Java sorusu daha fazladır. Üçüncüsü, işleri kolaylaştırmak için daha sonra eklendi.

Düğme üzerindeki bir tıklatma dinleyicisini ayarlamak çok yaygın bir iştir, ancak , oldukça az bir kod metni gerektirir. Boilerplate'in miktarını azaltmanın bir yolu, çeşitli düğmeleri arasında tek bir tıklama dinleyicisini paylaşmaktır. Bu teknik, sınıfların sayısını azaltırken, hala , adil bir kod gerektirir ve yine de XML düzen dosyanızda her bir düğmesine bir kimlik verilmesini gerektirir. Android 1.6 ile, bu 'un hiçbiri gerekli değildir. tıklamayı işlemek için Aktivite bir kamu yöntem bildirmek yapmanız gereken tek şey gerçekten her zaman tercih olarak gördüm

Source

1

(yöntem bir Görünüm argüman olması gerekir). Son iki yöntemden başka bir performans avantajı olduğundan emin değilim, çünkü çalışma zamanında nesne oluşturmuyorlar.

İlk seçenek, kodu tek düğmeyle ayırır; bu nedenle, yalnızca bu düğmenin tıklandığında kodun çalıştırılacağını bildiğinizden hata ayıklaması kolaydır. Ancak, birçok düğme başlatma yöntemlerinin büyük boyutlara genişletilmesine neden olabilir.

Son iki yöntem tüm düğme işlemlerini tek bir yere koyar, bu da zaman zaman kullanışlı ve temiz olabilir, ancak birçok düğme ile kullanıcı tarafından v.getId() yöntemiyle hangi düğmenin tıklatıldığını belirlemeniz gerekir.

Son seçenek, belirli düğmeler için belirli yöntemleri kolayca belirtebilmenizi ve böylelikle bunları birbirinden ayırabilmenizi sağlar, ancak yine tek amaçlı kullanabileceğiniz birçok yönteme sahip olursunuz.

Düğmeleri bir etkinlik veya sınıfta değil, iletişimin geri kalanıyla koruduğu için düğmeler içeren özel iletişim pencereleri için her zaman inline yöntemini (anonim sınıf) kullandım. onCreateDialog'u geçersiz kıldığımda özel iletişim kutusunun düğmelerini başlatıyorum.

Düğmeler ana pencerede ise, OnClickListener'ı Aktivitede uygularım. Üçüncü yöntemin açıklanması için

İlgili konular