- Android onClickListener – ошибка Android Studio или моя собственная ошибка?
- setOnClickListener не работает во фрагменте
- 5 ответов
- Обработчик нажатия кнопок не работает в Android Studio
- 6 ответов
- Ошибка Button.setOnClickListener
- Решение
- Полный список
- Один обработчик для двух кнопок
- Activity, как обработчик
- Самая простая реализация обработчика
Android onClickListener – ошибка Android Studio или моя собственная ошибка?
Предыдущий фрагмент кода был записан с помощью случайных сайтов и ответов из StackOverflow, но почему-то не работает. Я должен добавить, что я являюсь абсолютным новичком при создании приложений, и мой опыт работы с Java также очень ограничен.
Ошибки заключаются в следующем:
- “setOnClickListener”: отмечен красным.
- “public void onClick (View v) <“: Здесь “v” по какой-то причине помечается красным. Он продолжает оставаться красным в “String text = v.toString();”.
- Программа также находит мою точку с запятой избыточной в конце фрагмента.
Я использую бета-версию Android Studio на элементарной ОС, используя OpenJDK.
Я мог бы совершить любое количество ошибок, это точно. Но любой толчок в правильном направлении был бы очень оценен.
Мое предложение: Установите onClick в файле XML и создайте метод в текущем классе.
Согласитесь с графом, что вам нужно @Override метод onClick. Не уверен, что с ним не так. Фактически, когда я набрал ваш пример в Android Studio, я получил 3 буквы в OnClickListener, и он автоматически заполнил остальные, включая @Override.
Кроме того, я не думаю, что v.toString() предоставит вам любую полезную информацию. Если вы хотите, чтобы текст был нажат на кнопку, вам нужно нажать на кнопку, а затем вызвать getText():
или вы могли бы сделать:
Просто вызов v.toString() позволит вам получить описание этой кнопки, а не текст на ней.
Я считаю, что вам нужно @Override метод onClick.
Просто нажмите “ctrl + shift + o” и добавьте 1 библиотеку, которую вы показываете на экране.
Источник
setOnClickListener не работает во фрагменте
Я пытаюсь установить onclicklistener в своем фрагменте, в который включена пользовательская панель инструментов, а на панели инструментов у меня есть значок колокольчика, который я пытаюсь поставить onclicklistener , но он не работает
Это панель инструментов custom_toolbar.xml
Потом в Fragment.kt
Когда нажимают на звонок, я хочу выполнить какое-то действие. В настоящее время я должен иметь возможность отображать журнал. А также я могу получить к нему доступ и изменить его видимость, так что это не проблема инициации
5 ответов
Поэтому я посмотрел на него и обнаружил небольшую ошибку: мне пришлось использовать AppBar Layout, который фактически решил проблему, так как фрагмент.xml не смог получить макет панели приложения, поэтому он не распознавал щелчки. После этого он работал как шарм
Во фрагменте .xml
Попробуйте это, добавить идентификатор на панель инструментов
Тогда внутри фрагмент
Добавьте идентификатор в тег панели инструментов в xml, а затем в файл kotlin добавьте нижнюю строку в методе onViewCreated
(контекст как AppCompatActivity) .setSupportActionBar (your_toolbar_id)
Если вы хотите, чтобы RelativeLayout обрабатывал щелчок, вы должны добавить к нему атрибут android:clickable :
Это связано с тем, что RelativeLayout позволяет передавать сенсорное событие от него, чтобы дочернее представление могло обработать это событие.
Альтернатива . —
Возьмите Относительное расположение как заголовок в классе фрагмента, как это
Источник
Обработчик нажатия кнопок не работает в Android Studio
Структура каталогов моей деятельности, как показано ниже
Вот почему, чтобы получить идентификатор кнопки, я написал код ниже
Но, по некоторым причинам, когда я нажимаю кнопку, она не приходит внутрь. Я что-то пропустил? Мой код ниже.
Полный код действия
6 ответов
Лучший способ добиться этого — использовать setContentView(R.layout.activity_login) в вашем методе onCreate() , а затем нажать кнопку findViewById(R.id.btnLogin) .
Строка setContentView(R.layout.activity_login); раздувает макет и отображает представления, определенные в вашем XML. Это совершенно другие экземпляры, чем те, которые были созданы предыдущим вызовом inflate() . Вы, кажется, смешиваете способ, которым мы раздуваем представление для фрагмента и способ, которым мы делаем это для действия. В Деятельности мы просто называем setContentView() . Это означает, что вы должны изменить свой код на следующее:
Теперь код для установки OnClickListener найдет правильную кнопку.
Обратите внимание, что первые две строки onCreate() всегда будут такими, как показано здесь. Единственным отличием будет имя макета, используемого в setContentView() . Вы избежите сильной головной боли, если будете всегда следовать этой схеме.
Предполагая, что вы сделали то, что говорит @ Code-Apprentice (поместите что-то для выполнения), могут произойти другие вещи:
Кнопка clickable ? Проверьте это в макете или установите с помощью
такое кнопка enabled ? Так же, как и раньше.
есть ли другое View перекрывающее кнопку, которая ловит щелчок перед ним?
Удалите View rootView = getLayoutInflater().inflate(R.layout.activity_login, null, false); и замените его setContentView
Может быть намерение находится под OnActivityResult, не выходя на улицу
Так что просто удалите этот метод button.setonclicklitner () из OnactivityResult
Прежде всего, в Activity вам не нужно раздувать макет, вы связываете его с помощью метода setContentView :
Во-вторых, если вы хотите сделать это анонимным способом, вы готовы пойти, но добавьте что-то в метод onClick:
Или вы можете сделать это так:
Если вы делаете это таким образом, вы должны реализовать View.OnClickListener в своей деятельности с помощью:
И, наконец, опять же, если вы ничего не делаете в своем методе кликов, Android не сделает этого, поэтому:
Источник
Ошибка Button.setOnClickListener
Кто знает как отследить button.setOnClickListener?
хочу что то типа button.setOnTouchListener(this); @Override public boolean.
Не могу задать банальные setOnClickListener
Делаю первые шаги в программировании под Andoriod. Запускаю в эмуляторе. Приложение падает. Как я.
SetOnClickListener исчезает глобальная переменная
Помогите исчезает глобальная переменная //Здесь переменная выводится нормально Log.d(LOG_TAG.
Переключить setOnTouchListener с setOnClickListener в TextView
Всем привет! Как можно переключать setOnTouchListener с setOnClickListener в TextView? Заранее.
Решение
Ошибка при нажатии кнопки button
Добрый день, прошу прощения за такой глупый вопрос. Только начал разбираться, и тут сразу ловлю.
Как в Android положить один объект (button) на другой (button)?
Скажите, как можно положить один объект на другой, так что бы они оба были кликабельными? У менять.
Ошибка при нажатии на кнопку (button)
Проблема видна на скриншоте. Помогите, пожалуйста. Никак не могу раздуплиться. Код: using.
Если Button 1 и Button 2 нажаты — Button 3 стала активной, как?
Проверка если Button 1 и Button 2 нажаты — Button 3 стала активной Причем нужно чтобы это.
Ошибка на обработчике клика button
нужна помощь с курсовой.ошибка.как исправить не понимаю implementation var.
Ошибка при нажатии на button
при нажатии на кнопку выходит ошибка Project Project1.exe raised exception class EAccessViolation.
Источник
Полный список
В этом уроке мы:
— научимся использовать один обработчик для нескольких View-элементов
— научим Activity выступать в качестве обработчика
Создадим проект:
Project name: P0101_Listener
Build Target: Android 2.3.3
Application name: Listener
Package name: ru.startandroid.develop.listener
Create Activity: MainActivity
Будем работать с теми же View, что и в предыдущем уроке. Код для main.xml:
Один обработчик для двух кнопок
Итак, у нас есть TextView с текстом и две кнопки. Как и на прошлом уроке, мы сделаем так, чтобы по нажатию кнопки менялось содержимое TextView. По нажатию кнопки OK – будем выводить текст: «Нажата кнопка ОК», по нажатию Cancel – «Нажата кнопка Cancel». Но сейчас мы сделаем это с помощью одного обработчика, который будет обрабатывать нажатия для обеих кнопок.
Напомню механизм обработки событий на примере нажатия кнопки. Сама кнопка обрабатывать нажатия не умеет, ей нужен обработчик (listener), который присваивается с помощью метода setOnClickListener. Когда на кнопку нажимают, обработчик реагирует и выполняет код из метода onClick.
Соответственно для реализации необходимо выполнить следующие шаги:
— создаем обработчик
— заполняем метод onClick
— присваиваем обработчик кнопке
В нашем случае мы будем присваивать один обработчик обеим кнопкам, а внутри обработчика надо будет определять, какая именно кнопка была нажата.
Подготовим объекты и создадим обработчик:
Давайте заполнять метод onClick. На вход ему подается объект класса View, это как раз то, что нам нужно. Это View, на которой произошло нажатие, и, которая вызвала обработчик. Т.е. в нашем случае это будет либо кнопка OK либо Cancel. Нам осталось узнать ID этой View и сравнить его с нашими R.id.btnOk и R.id.btnCancel, чтобы определить какая именно это кнопка. Чтобы получить ID какой-либо View, используется метод getId. Для перебора результатов используем java-оператор switch.
Реализация метода onClick:
Если сейчас запустить приложение и проверить, то ничего не произойдет. Обработчик то мы создали, но не присвоили его кнопкам. Обеим кнопкам присваиваем один и тот же обработчик:
Вот теперь можем запускать и проверять, все должно работать.
Как вы понимаете, один обработчик может быть присвоен не двум, а любому количеству кнопок. И не только кнопкам. У остальных View-элементов тоже есть различные события, которые нуждаются в обработчиках. В дальнейшем мы еще будем с ними работать. А сейчас важно понять схему, как происходит обработка событий.
Отличие способа реализации на этом уроке от прошлого урока в том, что сейчас мы создали один объект-обработчик для обеих кнопок, а на прошлом уроке — два объекта, по одному каждой кнопке. Есть правило – чем меньше объектов вы создаете, тем лучше, т.к. под каждый объект выделяется память, а это достаточно ограниченный ресурс, особенно для телефонов. Поэтому создавать один обработчик для нескольких View это правильнее с точки зрения оптимизации. К тому же кода становится меньше и читать его удобнее.
Есть еще один способ создания обработчика, который вовсе не потребует создания объектов. Будет использоваться уже созданный объект – Activity
Activity, как обработчик
Кнопка присваивает себе обработчика с помощью метода setOnClickListener (View.OnClickListener l). Т.е. подойдет любой объект с интерфейсом View.OnClickListener. Почему бы классу Activity не быть таким объектом? Мы просто укажем, что Activity-класс реализует интерфейс View.OnClickListener и заполним метод onCreate.
Создадим для этого новый проект:
Project name: P0102_ActivityListener
Build Target: Android 2.3.3
Application name: ActivityListener
Package name: ru.startandroid.develop.activitylistener
Create Activity: MainActivity
Экран снова возьмем тот же самый:
Подготовим объекты и добавим реализацию интерфейса (implements onClickListener)
OnClickListener подчеркнут красным, т.к. его нет в импорте. Поэтому CTRL+SHIFT+O и выбираем View.OnClickListener.
Теперь Eclipse ругается на класс MainActivity. Это происходит потому, что для класса прописан интерфейс, но нет реализации методов этого интерфейса. Исправим это с помощью Eclipse. Наведите курсор на MainAcivity и выберите Add unimplemented methods
Eclipse добавит знакомый нам метод onClick. Только теперь этот метод будет реализован в Activity, а не в отдельном объекте-обработчике. Соответственно Activity и будет выступать обработчиком.
Заполним метод точно так же как и раньше. Ничего не изменилось. Ему на вход так же подается View (на которой произошло событие), по Id мы определим, какая именно эта View и выполним соответствующие действия:
Осталось в методе onCreate присвоить обработчик кнопкам. Это будет объект this, т.е. текущий объект MainActivity.
При такой реализации мы не создали ни одного лишнего объекта (Activity создается в любом случае) и затраты памяти минимальны, это рекомендуемый метод. Но, возможно, такой способ покажется сложным и непонятным, особенно если мало опыта в объектно-ориентированном программировании. В таком случае используйте ту реализацию, которая вам понятна и удобна. А со временем и опытом понимание обязательно придет.
Самая простая реализация обработчика
Есть еще один способ реализации. В layout-файле (main.xml) при описании кнопки пишем:
Т.е. используем атрибут onClick. В нем указываем имя метода из Activity. Этот метод и сработает при нажатии на кнопку.
Далее, добавляем этот метод в Activity (MainActivity.java). Требования к методу: public, void и на вход принимает View:
В методе прописываете необходимые вам действия, и они будут выполнены при нажатии кнопки.
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник