Большинство образцов, которые я вижу, кажется, использует анонимный метод в вызове как button.setOnClickListener (). Вместо этого я хотел бы передать в методе, определенном на классе Действия, в котором я работаю. Что Java/Android эквивалентен из следующего проводного соединения обработчика событий в C#?
Button myButton = new Button();
myButton.Click += this.OnMyButtonClick;
Где:
private void OnMyButtonClick(object sender, EventArgs ea)
{
}
По существу я хотел бы снова использовать неанонимный метод для обработки события щелчка нескольких кнопок.
Ответ Романа Нурика почти верен. View.OnClickListener() на самом деле является интерфейсом. Поэтому, если ваша активность реализует OnClickListener, вы можете установить его в качестве обработчика кликов по кнопкам.
public class Main extends Activity implements OnClickListener {
public void onCreate() {
button.setOnClickListener(this);
button2.setOnClickListener(this);
}
public void onClick(View v) {
//Handle based on which view was clicked.
}
}
Делегатов, как в .Net, нет, так что вы застряли в использовании функции, основанной на интерфейсе. В .Net вы можете указать другую функцию с помощью делегатов
. Аргументом к View.setOnClickListener
должен быть экземпляр класса View.OnClickListener
(внутренний класс класса View
). Для вашего случая использования, вы можете сохранить экземпляр этого внутреннего класса в переменной, а затем передать его в следующем виде:
View.OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
// do something here
}
};
myButton.setOnClickListener(clickListener);
myButton2.setOnClickListener(clickListener);
Если вам нужен этот слушатель через несколько подпрограмм/методов, вы можете сохранить его как переменную-член в вашем классе активности.
.Подпись метода должна быть такой...
public void onMyButtonClick(View view){
}
Если вы не используете динамические кнопки, вы можете установить событие "onClick" от конструктора на "onMyButtonClick". Так я делаю это для статических кнопок на экране. Мне было проще соотнести его с C#.
.