Я шокирован, что никто не говорил об этом, но будьте осторожны, хотя android:onClick
XML кажется удобным способом обработки щелчков, setOnClickListener
реализация делает что-то дополнительное, чем добавление onClickListener
. В самом деле, он присвоил свойству представления clickable
значение true.
Хотя это может не быть проблемой для большинства реализаций Android, согласно конструктору телефона, button всегда по умолчанию имеет значение clickable = true, но другие конструкторы на некоторых моделях телефона могут иметь значение по умолчанию clickable = false в представлениях без кнопок.
Таким образом, установки XML недостаточно, вам нужно все время думать, чтобы добавить android:clickable="true"
не кнопку, и если у вас есть устройство, на котором по умолчанию используется clickable = true, и вы даже однажды забыли поставить этот атрибут XML, вы не заметите проблема во время выполнения, но вы получите обратную связь на рынке, когда она окажется в руках ваших клиентов!
Кроме того, мы никогда не можем быть уверены в том, как proguard будет скрывать и переименовывать атрибуты XML и метод класса, поэтому не на 100% безопасно, что у них никогда не будет ошибки в один прекрасный день.
Так что, если вы никогда не хотите иметь проблемы и никогда не думаете об этом, лучше использовать setOnClickListener
или библиотеки, такие как ButterKnife с аннотациями.@OnClick(R.id.button)
onclick
как вам нужно убедиться, что каждый класс реализует этот метод. Предполагается, что вы используете макет более одного раза. Однако, если бы у вас был интерфейс java, чтобы гарантировать, что метод присутствует во всех классах, которые его реализуют, вам не о чем беспокоиться.