Android - Как установить именованный метод в button.setOnClickListener ()

Большинство образцов, которые я вижу, кажется, использует анонимный метод в вызове как button.setOnClickListener (). Вместо этого я хотел бы передать в методе, определенном на классе Действия, в котором я работаю. Что Java/Android эквивалентен из следующего проводного соединения обработчика событий в C#?

Button myButton = new Button();
myButton.Click += this.OnMyButtonClick;

Где:

private void OnMyButtonClick(object sender, EventArgs ea)
{
}

По существу я хотел бы снова использовать неанонимный метод для обработки события щелчка нескольких кнопок.

12
задан James Cadd 29 December 2009 в 02:12
поделиться

3 ответа

Ответ Романа Нурика почти верен. 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 вы можете указать другую функцию с помощью делегатов

.
16
ответ дан 2 December 2019 в 06:08
поделиться

Аргументом к View.setOnClickListener должен быть экземпляр класса View.OnClickListener (внутренний класс класса View). Для вашего случая использования, вы можете сохранить экземпляр этого внутреннего класса в переменной, а затем передать его в следующем виде:

View.OnClickListener clickListener = new OnClickListener() {
    public void onClick(View v) {
        // do something here
    }
};

myButton.setOnClickListener(clickListener);
myButton2.setOnClickListener(clickListener);

Если вам нужен этот слушатель через несколько подпрограмм/методов, вы можете сохранить его как переменную-член в вашем классе активности.

.
8
ответ дан 2 December 2019 в 06:08
поделиться

Подпись метода должна быть такой...

public void onMyButtonClick(View view){

}

Если вы не используете динамические кнопки, вы можете установить событие "onClick" от конструктора на "onMyButtonClick". Так я делаю это для статических кнопок на экране. Мне было проще соотнести его с C#.

.
1
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: