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

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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