События: Не могли бы вы сказать мне, если я понял? - PullRequest
0 голосов
/ 25 июня 2018

Я начал несколько недель назад изучать Java для собственной разработки приложений для Android.

В прошлом я пытался использовать Xamarin и C # для мобильной кроссплатформенной разработки, но через некоторое время я решил отказаться от него и делать только приложения для Android непосредственно на Java.

Я заметил много общего между Java и C #, но есть одна вещь, которая вызывает у меня головную боль: механизм обработки событий.

Кажется, что Java не управляет событиями изначально, как C # (в C # есть делегаты и события, и это особые типы делегатов), но использует интерфейсы для достижения цели.

Теперь, когда я создаю в Android кнопку с событием нажатия, я вижу что-то вроде этого:

Button btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
   // some stuff here
   }
});

Если я правильно понял, btn.setOnClickListener() - это метод, используемый для наблюдения за объектом, реализующим интерфейс onClickListener. В этом случае мы создаем новый экземпляр объекта View, который реализует интерфейс: new View.OnClickListener(). Метод onClick(View view) определен в интерфейсе OnClickListener, поэтому нам нужно реализовать его с помощью some stuff

Что не ясно, так это значение параметра (View view) в методе onClick(): когда я передаю его? Кажется, я могу реализовать метод onClick() без необходимости его передачи. В чем его смысл? Возможно, я неправильно понял, как работают события Java. Я много пробовал в Сети, но не смог найти четкого и понятного объяснения (без привлечения элементов gui Swing, AWT и т. Д.) О том, как работает механизм событий в Java.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Если я правильно помню, как работал с Android, (View view) помогает 'onClick' понять, что ему нужно что-то из пользовательского интерфейса для использования.Если вы попытаетесь без него, вы получите ошибку или если вы попробуете public void buttonClick(){//do something}, то в XML добавьте onClick = 'buttonClick'.Вы также получите ошибку.По сути, наличие (View view) просто помогает API понять, что происходит с пользовательским интерфейсом.

0 голосов
/ 25 июня 2018

setOnClickListener() определяет обратный вызов, вызываемый при нажатии на представление (в вашем случае Кнопка , но оно применяется к любому Представлению ).

View.OnClickListenerинтерфейс только с одним методом onClick(View v)Вам не нужно инициализировать или предоставлять какой-либо объект View, это наоборот.Когда кнопка нажата, будет вызван метод onClick(View v), а v будет фактическая кнопка, которая была нажата.

Например, вы можете получить текст кнопки, когда она нажата.

Button btn = findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
      Button button = (Button) view;
      Log.d("@@@@", "You clicked the " + button.getText() + " button");
   }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...