OnClickListener jest interface i za pomocą new OnClickListener()
jako parametr dla btn1.setOnClickListener jest faktycznie tworzenia Anonymous Inner Class który implementuje OnClickListener . A metoda onClick musi zostać zadeklarowana, ponieważ jest to metoda abstrakcyjna wewnątrz tej klasy interfejsu. Każdy kod, który napiszesz wewnątrz onClick, zostanie wykonany po naciśnięciu przycisku.
Aktualizacja
zrobić to za pomocą Anonymous wewnętrzną klasę w obiekcie:
//declaring OnClickListener as an object
private OnClickListener btnClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
//passing listener object to button
btn1.setOnClickListener(btnClick);
to zrobić bez użycia klasa Anonymous:
public class YourActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
Button b = new Button(this);
//setting listener to button
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
Jedyna różnica pomiędzy tymi podejściami jest, jeśli twój przycisk zawiera kliknięcie kod zdarzenia, który ma być ważny/dostępny tylko dla tego przycisku, możesz użyć wewnętrznej klasy, tak jak robisz w swoim kodzie (ponieważ jest to łatwe do zrobienia od razu). Jeśli jednak istnieje wiele przycisków wymagających wykonania tego samego kodu w zdarzeniu onClick, możesz zdefiniować detektor jako obiekt i przekazać go do niego.
Hi odo mijamy obiekt jako argument. Zasadniczo tworzymy wewnętrzną klasę, która nadpisuje metodę onClick. –