Лучшая практика android: атрибут onClick XML или setOnClickListener?

Я следую учебнику Google по Android и обнаружил, что есть два способа получить обратные вызовы виджетов в соответствии с заголовком (или только onClick – я не знаю).

Я старший разработчик Java Swing, поэтому внутренний подход класса заставляет меня чувствовать себя как дома 🙂 Но я понимаю, что подход xml новее – поэтому Google должен был добавить его по какой-то причине.

В чем тут причина? Разве это «лучше» сделать это на платформе Android, если теперь следует избегать подхода к внутреннему классу (в версиях, которые его поддерживают)?

Solutions Collecting From Web of "Лучшая практика android: атрибут onClick XML или setOnClickListener?"

Я не использую атрибут XML onClick потому что это означает, что Activity которая накачивает XML, должна реализовать метод значения onClick. Но если вы выполните какой-либо рефакторинг, и вы измените этот метод, тогда вы получите исключения во время выполнения, если изменения не будут сопоставлены с XML. Или если вы хотите использовать некоторые, include или merge .

Чтобы добавить еще: если вы используете фрагменты, вам нужно делегировать событие click для фрагмента, который определяет атрибут onClick XML.

Это действительно меньше кода, но для того, чтобы поддерживать / реорганизовывать такой код, он делает вещи трудными и открытыми для ошибок. Поэтому не используйте его в производственном коде.

Вы можете определять виджеты, такие как кнопка, как xml, так и программно. Может дать возможность добавить слушателя в обоих направлениях. Таким образом, нет преимуществ друг от друга.

Если вы хотите выполнить макетную работу из xml, андроид предоставил вам возможность сделать это.

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

Но есть люди, которые используют это сочетание.

Надеюсь, вы понимаете, что я имею в виду.

Если вы это сделаете программно, вы можете просто написать onClick () и указать, что пишите случай с коммутатором и на основе идентификаторов просмотра вы можете определить поведение, с которым я лично чувствую, легче работать.

Если кнопки всегда будут всегда, и одно и то же действие будет выполняться всегда, то использование дескриптивных обработчиков событий имеет смысл. Например, когда вам даже не нужно делать findViewById() для этой кнопки.

Если вы можете включить или отключить нажатие или может генерировать кнопки динамически и т. Д. И т. Д., То динамическая настройка обработчиков событий в коде имеет смысл.

View.OnClickListener – это интерфейс, который определяет метод onClick(View) .

Вы реализуете интерфейс и метод в своем коде.