Używamy do tego intefejsu Listenera - onClickListener. Tylko pojawia się następne pytanie. Gdzie go wrzucić.
1. Jako interfejs całej klasy aktywności:
public class myActivity extends Activity implements onClickListener{i potem dorabiać jedną wspólną onClick ze switch'em dla każdego id klikniętego buttona.
....
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
public void onClick(View v) {2. Dodawać osobny listener do każdego jednego buttona?
...
switch(v.getId()) {
case R.id.button1: {}break;
case R.id.button2: {}break;
}
}
button1.setOnClickListener(
new View.OnClickListener() {
public void onClick(View args) { }
}
)
button2.setOnClickListener(
new View.OnClickListener() {
public void onClick(View args) { }
}
)
Po przeczytaniu masy forów i przykładów, zauważyłem że stosowanie switcha uważa się za dopuszczalne, ale jednak jest złą praktyką. Sam jeszcze tego nie doświadczyłem, ale podobno pojawiają się straszne problemy podczas późniejszej rozbudowy aplikacji.
Większość ludzi poleca i stosuje zastosowanie anonimowych klas (pokazanych na przykładzie 2), chociaż muszę się zgodzić z paroma osobami, że za szczyt czytelności kodu tej metody nie można uznać.
Poza tymi dwiema, spotkałem się z jeszcze jednym typem implementacji listenerów, który jest można powiedzieć fajną wariacją przykładu drugiego - z klasami anonimowymi. Otóż tworzymy osobne listenery dla każdego obiektu itd. itd. tak jak normalnie, po czym w kod metody onClick poszczególnych listenerów wpakowujemy wywołanie osobnych, prywatnych metod klasy aktywności. W ten sposób oprogramowane w ładny sposób zdarzenia buttonów i super przejrzysty kod.
private void button1Click() {}
button1.setOnClickListener(
new View.OnClickListener() {
public void onClick(View args) { button1Click(); }
}
)
Brak komentarzy:
Prześlij komentarz