Intereting Posts
Gradle 2.3.0-alpha1 не работает с привязкой данных Как использовать контекстную панель действий (CAB) с поддержкой .v7.widget.Toolbar и Listview? Использование воспроизведения IntentService для MediaPlayer Android Studio не может восстановить ключ из Keystore Android.support.design.widget.FloatingActionButton implenetation FAB уменьшает размер изображения Получить толкаемый идентификатор для определенного значения в firebase android Произошла утечка памяти (утечка активности), вызванная CookieSyncManager? Как запустить или запустить приложение внутри фрагмента Android? Удаление вторичного значка из уведомления об андроиде Как разработать приложение для распознавания голоса, например, говорящий тома Установить / Unistall из команды оболочки в Android Android Fragment и Dependency Injection Несколько вопросов о пользовательских разрешениях в Android Как использовать грамотное управление зависимостями Google Play Services 6.5 Разрешить пользователю вставлять изображение в приложение для Android

Android onClick в XML против OnClickListener

Я понимаю, что раньше задавался аналогичный вопрос, но это другое. Я довольно новичок в разработке приложений для Android, и у меня есть три вопроса относительно разницы между атрибутом XML android:onclick="" и методом setOnClickListener .

  1. Каковы различия между ними? Является ли разница между двумя реализациями, найденными во время компиляции или времени выполнения или для обоих?

  2. Какие варианты использования благоприятны для реализации?

  3. Какая разница (ы) делает использование фрагментов в Android в выборе реализации?

Solutions Collecting From Web of "Android onClick в XML против OnClickListener"

Разница между OnClickListener и OnClick:

  • OnClickListener – это интерфейс, который вам нужно реализовать, и его можно установить в виде Java-кода.
  • OnClickListener – это то, что ждет, когда кто-то на самом деле щелкнет, onclick определяет, что происходит, когда кто-то нажимает.
  • В последнее время андроид добавил атрибут xml в представления под названием android: onclick, которые могут использоваться для обработки кликов непосредственно в действии вида без необходимости реализации какого-либо интерфейса.
  • Вы можете легко поменять одну реализацию прослушивателя на другую, если вам нужно.
  • OnClickListener позволяет вам разделить действие / поведение события click из представления, которое запускает событие. Хотя для простых случаев это не так уж и важно, для комплексной обработки событий это может означать более читабельность и удобство обслуживания кода
  • Поскольку OnClickListener является интерфейсом, класс, который его реализует, обладает гибкостью при определении переменных экземпляра и методов, необходимых для обработки события. Опять же, это не очень важно в простых случаях, но для сложных случаев мы не хотим, чтобы мы смешали переменные / методы, связанные с обработкой событий, с кодом представления, который запускает событие.
  • Функция onClick со связыванием функций в XML-макете является связыванием между onClick и функцией, которую он вызовет. Функция должна иметь один аргумент (вид), чтобы функция onClick функционировала.

Оба функционируют одинаково, только один устанавливается через java-код, а другой – через xml-код.

Выполнение кода setOnClickListener:

 Button btn = (Button) findViewById(R.id.mybutton); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myFancyMethod(v); } }); // some more code public void myFancyMethod(View v) { // does something very interesting } 

Внедрение XML:

 <?xml version="1.0" encoding="utf-8"?> <!-- layout elements --> <Button android:id="@+id/mybutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click me!" android:onClick="myFancyMethod" /> <!-- even more layout elements --> 

Представление:

Оба они одинаковы в производительности. Xml предварительно анализируется в двоичном коде при компиляции. Так что в Xml нет надголовья.

Ограничение:

Android: onClick – для уровня API 4, и поэтому, если вы нацеливаете <1.6, то вы не можете его использовать.

Просто:

Если у вас есть android:onClick = "someMethod" в xml , он ищет public void someMethod в вашем классе Activity. OnClickListener вызывается прямо из вашей Activity и связан с каким-то определенным View . Например, someButton.setOnClickListener и в коде ниже сказано, что нужно делать при нажатии someButton .

Надеюсь, поможет 🙂

Xml onClick не работает для вложенных элементов макета, которые динамически накачаны в API уровня 19

Я в шоке, никто не говорил об этом, но будьте осторожны, хотя android:onClick XML, кажется, удобный способ обработки щелчка, реализация setOnClickListener делает что-то дополнительное, чем добавление onClickListener . В самом деле, это свойство свойства clickable true.

Хотя это может и не быть проблемой для большинства реализаций Android, по словам конструктора телефона, кнопка всегда имеет значение по умолчанию clickable = true, но другие конструкторы на какой-либо модели телефона могут иметь значение clickable = false для просмотров без кнопок.

Так что настройки XML недостаточно, вы должны постоянно думать о том, чтобы добавить android:clickable="true" на кнопку без кнопки, и если у вас есть устройство, в котором значение по умолчанию – clickable = true, и вы забыли хотя бы один раз поставить этот XML Атрибут, вы не заметите проблему во время выполнения, но получите обратную связь на рынке, когда она будет в руках ваших клиентов!

Кроме того, мы никогда не можем быть уверены в том, как proguard будет запутывать и переименовывать XML-атрибуты и метод класса, поэтому не на 100% безопаснее, чтобы в один прекрасный день у них никогда не было ошибки.

Поэтому, если вы никогда не хотите иметь проблемы и никогда не задумываетесь об этом, лучше использовать setOnClickListener или библиотеки, такие как ButterKnife с аннотацией @OnClick(R.id.button)

Как было сказано ранее: они оба способ добавить логику в ответ на событие, в данном случае событие «щелчок».

Я бы пошел на разделение между логикой и презентацией, как и в мире HTML / JavaScript: Оставьте XML для презентации и добавьте прослушиватели событий с помощью кода.

Если у вас несколько кнопок, использующих только один метод, я предлагаю сделать это в java. Но если у вас есть кнопка с одним конкретным методом, onClick в XML будет лучше.

Удобнее всегда использовать атрибут android: onClick, если у вас нет веской причины, например, если вы создаете экземпляр Button во время выполнения или вам нужно объявить поведение клика в подклассе Fragment.

Я думаю, что основное различие между ними:

OnClick: Когда вы нажимаете на кнопку пальцем.

OnClickListner: Возможно, это более широкий выбор, который реализуется в разных кодах.

Например, когда вы вводите url «ymail.com», yahoo находит ваше имя пользователя и ваш пароль из вашего браузера и включает кнопку состояния нажатия, чтобы открыть вашу почту. Это действие должно быть реализовано только в onClickListener.

Это моя идея!