Разница между событием OnClick () и OnClickListener? - PullRequest
21 голосов
/ 17 сентября 2011

Я всегда использую событие onclick() в большинстве своих проектов. Но я прочитал о OnClickListener(). Кто-нибудь может сказать, в чем разница между этими двумя? И какой из них лучше всего использовать в приложении Android?

Ответы [ 15 ]

27 голосов
/ 17 сентября 2011

Я не уверен, что вопрос ясен.View.OnClickListener - это интерфейс, который определяет метод onClick(View).Если у вас есть класс, который намеревается прослушивать щелчки, вы должны как реализовать интерфейс (если он еще не расширяет класс, который делает), так и реализовать этот метод.Вы должны использовать оба;они не как-то альтернативы.

23 голосов
/ 17 сентября 2011

OnClickListener - это интерфейс, который вам нужно реализовать, и его можно настроить на просмотр в коде Java.

В последнее время android добавил атрибут xml к представлениям под названием android:onclick, который можно использовать для обработки кликов непосредственно в активности представления без необходимости реализации какого-либо интерфейса.

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

21 голосов
/ 17 сентября 2011

Я предполагаю, что onClick использует тот, который вы определяете в XML Layout. Эти два варианта являются альтернативными и выполняют одну и ту же функцию, но реализованы по-разному.

  1. onClick с привязкой функции в XML Layout является связыванием между onClick и функцией, которую он будет вызывать. Функция должна иметь один аргумент (View) для функции onClick.

  2. OnClickListener - это интерфейс, который может реализовать любой класс. Поскольку это интерфейс, который может реализовать любой класс, он обладает большей гибкостью и сложнее по форме. Немного гибкости, которую вы могли бы иметь с OnClickListener

    • Вы можете легко поменять одну реализацию слушателя на другую, если вам нужно.
    • OnClickListener позволяет вам отделить действие / поведение события click от View, который вызывает событие. В то время как для простых случаев это не такая уж большая проблема, для сложной обработки событий это может означать лучшую читаемость и удобство сопровождения кода
    • Поскольку OnClickListener является интерфейсом, класс, который его реализует, обладает гибкими возможностями при определении переменных экземпляра и методов, которые ему необходимы для обработки события. Опять же, в простых случаях это не имеет большого значения, но для сложных случаев мы не хотим смешивать переменные / методы, связанные с обработкой событий, с кодом представления, запускающего событие.
11 голосов
/ 17 сентября 2011

OnClickListener - это то, что ждет, когда кто-то действительно щелкнет, onclick определяет, что происходит, когда кто-то нажимает

слушатель - это класс, onclick - это метод, это различие не очень полезно в простых случаях, но если вы хотите быть более сложным, оно становится более необходимым

5 голосов
/ 01 декабря 2016
Button button = (Button)findViewById(R.id.buttonId);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do stuff
    }
});

OnClickListener является интерфейсом, а onClick является методом OnClickListener .

0 голосов
/ 27 мая 2018

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

Когда вы определяете слушателя с помощью атрибута onClick, представление ищет метод с таким именем только в своей активности хоста. Программная установка OnClickListener позволяет вам контролировать поведение кнопки где-то, кроме ее активности на хосте. Это станет очень актуальным, когда мы поговорим о Фрагментах, которые в основном представляют собой мини-действия, позволяющие вам создавать повторно используемые коллекции представлений с собственным жизненным циклом, который затем можно объединить в действия. Фрагменты всегда должны использовать OnClickListeners для управления своими кнопками, так как они не «Активности» и не будут искать слушателей, определенных в onClick.

0 голосов
/ 25 июля 2017

Вот простая терминология. Если вы находитесь дома и хотите позвонить кому-нибудь ... вы можете позвонить напрямую, и они могут вас слушать.(используйте onclick).Но если вы находитесь на улице и хотите позвонить кому-нибудь дома, вам нужно использовать телефон или Интернет (необходимо использовать onclicklistener).В Android все начинается с дома, т.е. main_activity Это способ, которым Android облегчает вашу работу;когда у вас есть одно действие, вам не нужно присоединять слушателя, создавать объект и определять его.Просто используйте onClick.Onclicklistener обычно используются во фрагментах.Так что продолжайте кодировать.

0 голосов
/ 27 июня 2017

каждый упомянул о OnClickListener listner, который всегда использовал. я хочу добавить еще одну точку, android:onClick работает как метод, и ей не нужно ссылаться, поэтому полезно, когда вам нужно добавить кнопку после выполнения некоторой задачи, чтобы вы не могли ссылаться на нее для OnClickListener.

Для example, когда мы создаем видовой пейджер только с макетом (без фрагментов), если вы помещаете кнопку в любой макет, он выделяется только тогда, когда макет видим, поэтому вы не можете использовать метод findViewById для кнопки в этом случае android:onClick стало полезным, просто включи этот метод в действие !!

0 голосов
/ 23 июня 2017

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

Когда вы определяете слушателя с помощью атрибута onClick, представление ищет метод с таким именем только в своей активности хоста. Программная установка OnClickListener позволяет вам контролировать поведение кнопки где-то, кроме ее активности на хосте. Это станет очень актуальным, когда мы узнаем о Фрагментах, которые являются в основном мини-действиями, позволяющими вам создавать повторно используемые коллекции представлений с их собственным жизненным циклом, который затем можно объединить в действия. Фрагменты всегда должны использовать OnClickListeners для управления своими кнопками, так как они не Activity и не будут искать слушателей, определенных в onClick.

0 голосов
/ 20 мая 2017

Когда мы хотим добавить прослушиватель кликов для кнопки в коде Java, мы используем OnClickListener.
Когда мы хотим добавить прослушиватель кликов к кнопке в файле макета, мы используем android:onClick="your_method"
Если вы используете вариант XML, вы должны реализовать your_method в своем классе приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...