Я начал несколько недель назад изучать 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.