Урок 9. Три cпособа обработки нажатия кнопки в мобильном приложении (Android Studio)
Вставка
- Опубліковано 28 кві 2015
- Подпишись на Продвинутые курсы по созданию мобильных приложений и игр для андроид на языках Java и Kotlin: www.fandroid.info/category/pr...
В этом уроке вы узнаете, как в андроид повесить слушатель (OnClickListener) на кнопку (Buttons). Как заставить кнопку реагировать на нажатие, и как обрабатывать нажатие кнопки на экране android устройства. Также вы познакомитесь с тремя разными способами обработки нажатия кнопки.
Весь плейлист: • Уроки 1-10 по разработ...
Ссылки в видео:
Правила присвоения имен в java: www.fandroid.info/pravila-pris...
События и слушатели в Java: www.fandroid.info/sobytiya-i-s...
Интерфейсы в java: www.fandroid.info/interfejsy/
Группа взаимопомощи Вконтакте для начинающих ANDROID разработчиков и программистов: www.fandroid.info/gruppa-vzaim...
Скачать видеоуроки: www.fandroid.info/skachat-vide...
Поддержите наш проект: www.fandroid.info/spasibo-za-v...
Текстовая версия урока (отличается от видеоверсии) startandroid.ru/ru/uroki/vse-u...
Обсуждение урока на форуме forum.startandroid.ru/viewtopi...
Обсуждение урока на форуме:
#android #AndroidStudio #startandroid - Наука та технологія
Смотрю уроки в 2022 году спасибо за отличные уроки всего вам хорошего ♥️♥️♥️
Я как ребёнок радовался,что у меня выводился скрытый текст )0))000 Спасибо,с меня лайк и подписка.
спасибо за уроки, все очень доходчиво хоть и новое для меня, особенно радуют объяснения каждого элемента кода-это очень важно для начинающих)
Виталий, вы большой молодец, огромная благодарность за качественные уроки! Успехов!!!
Наконец-то нашёл понятный гайд, ей богу, это ведь так просто было объяснить, в инете куча непонятных статей написано, особенно на хабре. Спасибочкинс, лайк.
Алексей Шамшур не согласен. Хабр и stackoverflow - являются самыми информативным источниками данных для программиста.
@@acd2377 похоже, что там специально всё запутывают
Гениально! Спасибо! Будем двигаться дальше! Огромные труды вы вложили, огромное спасибо!
привет
я из 2019, прокастовывать объекты при использовании метода findViewById уже не нужно
поэтому (TextView) и (Button) можно не писать
также для новичков будет уместно записать "Button button1, button 2, button 3" одной строкой вместо трёх, в будущем пригодится
А как прокастовывать объекты?
Спасибо, Виталий, большой респект Вам за Ваши уроки!
Спасибо большое! Уже второй день прохожу уроки, начал уже понимать что куда. Благодарю.
Виталий! Вы лучший! Спасибо вам огромное за детальное объяснения всего! Успехов!
Spasibo vam bolshoe za vashu rabotu!!!! Kak raz pishu projekt,ochen pomogaet. Obyasneniya ochen ponyatnye, skorost obyasneniya toge ustraivaet-dostupno dlya novichka! Prosto super, 10 iz 10!
Подключил свой телефон после "танца с бубном" к AndroidStudio, и - АЛЛИЛУ́ЙЯ!!!!!!!!! автору ))))))
Красотища!!!!!!!!!
Лучшие уроки!!!
Столько много хороших видео на русском! Спасибо вам большое!
Спасибо за ваш труд!!!
Замечательные уроки.
Спасибо!! Отличные уроки!
Отличные уроки !
Молодец, продолжай в том же духе!
android:Спасибо, очень приятные и понятные уроки;)
Спасибо за Урок)
При третьем способе гораздо удобней в XML файле навести курсор на название обработчика, нажать комбинацию Alt+Enter и добавить его в MainActivity, чтобы не вводить все вручную.
Крутой урок!(лайк)
Лучший просто!
Как сделать отображение всех элементов во вкладке Widgets? Очень много чего не хватает и в других. AS v.2.2.3
Столкнулся с проблемкой и нашел решение, опубликую тут, на всякий случай. Если вместо русских букв показываются кракозябры, то смените кодировку файла MainActiviti.java с windows-1251 на UTF-8 (внизу окна программы справа)
Все правильно сделал!!!
karambinos Спасибо!!!
karambinos в HTML тоже самое.
А как это всё прописывать в версии 1.5.1 ??? Там текст в MainActivity немного не такой. В итоге у меня не получилось
хороший человек
Виталий, а как с помощью второго метода добавить ещё кнопки? Или он расчитан на одну кнопку для всего mainactivity?
Вот вот. Все четко и понятно. И всего за 15 минут)
у меня была проблема не было при описании второго метода в выподающем меню пункта Implement methods , вы его сделайте через нажатие слудующих клавиш CTRL + I
Ребят подскажите, почему у меня в MainActivity не отображаются все элементы которые я накидал в activity_main ???
Какой из этих способов самый ресурсоэффективный и быстрый с точки зрения выполнения в рантайме?
А каким образом начал меняться текс вверху(Large text)?
Когда я сделал для одной кнопки, при нажатии у меня менялся текст в том же окне где сама кнопка.
Почему мы в метод public void onClick(View view) {} передаем параметр и в теле метода его не используем?
имеет ли смысл знать второй и третий способы например если 1 по душе больше и кажется проще?
или второй тоже применяться будет в редких случаях?
не считая того конечно, что пригодится при обучении, так как придется смотреть много видео где по разному люди работают
Подскажите, кто знает, когда обращаешься к свойствам класса, нужно ли обращаться через this.textView? Как принято в джава?
хотелось бы узнать, с какого плейлиста лучше начинать знакомиться с разработкой? есть в еклипс и есть в андроид студио. pdf вариант, как я понял, по еклипс сделан. Все же лучше сначала просмотреть эклипс или параллельно одинаковые темы из обоих плейлистов смотреть?
а как вы сделали "нажата кнопка 2", где текст для кнопки 2 прописан? у меня только 1 и 3 работают.
Я правильно понимаю, что вторым способом можно обрабатывать только одну кнопку?
спасибо)
Всем привет! начинаю только изучение Андроид, да и в целом самой Явы, и стыкнулся с такой проблемой.. создавал "TextView" и присвоил id.. потом удалил этот "текст", но в автодополнении название этой айдишки висит.. интересует, это баг такой, или все же где-то это значение сохранено ещё.. примечательно, что TextView удалял из области кнопкой delete.. могло ли это послужить такому поведению? Спасибо.
Можете подсказать, почему при компиляции программы на виртуальное устройство или планшет происходит ошибка и сворачивается приложение, а в самом android studio пишет "Performing full build and install: On devices with API level below 21, a full build is required if the app is not running" ?
Уроки очень хорошие и доходчивые, Виталию респект! Во многом правда приходится поработать и самому, но это идёт только на пользу для изучения. Надеюсь, что в итоге не сдамся и освою всё, чему учит Виталий.
Второй раз делаю в точности всё что говорится в этом уроке. Не получается запустить приложение на эмуляторе, т.к. оно сразу закрывается с ошибкой.
Название класса ActionBarActivity почему-то среда зачёркивает и предлагает заменить на AppCompatActivity. Оно же объявляется сразу по умолчанию... Что я делаю не так?
Lagre Text находиться: в вашем ....xml , там где кнопка Design(
дизайн) в этом столбищще ( у меня справа) найдите textAppearance и нажмите на мал.треугольничек-- и вот там будет и Lagre,и Medium и т.д
Лучший
Вопрос. Вот запускаю я эмулятор, проверяю свое приложение. Далее делаю изменения в коде приложения, но в эмуляторе изменения не происходят. Приходиться перезапускать эмулятор. Тогда изменения вступают в силу. А есть другой вариант? Пробовал закрывать свое приложение, потом снова открывать, но не помогает. Пока не перезапущу, ничего не меняется.
Помогите, как создать 4 кнопки, при нажати меняютя текста кнопок???
Как сделать, чтобы при нажатии 1 кнопки повторно выводился другой текст?
Доброго времени суток!
У меня возникли затруднения при практическом разборе видеоурока, и я хотел бы задать несколько вопросов.
1)В вашем уроке и данной версии Android Studio используется
"public class MainActivity extends ActionBarActivity"
но в новой версии Android Studio используется
public class MainActivity extends AppCompatActivity
Может ли это повлиять на построение 2-ух последних методов для обработки нажатия на кнопку ?
2) Если ответ на первый вопрос отрицательный, то не могли бы вы подсказать почему на эмуляторе при нажатии 2 и 3 кнопки приложение закрывается с ошибкой Unfortunatly, My app has stopped,
и это при условии что код написан верно и перепроверена каждая буква скобка и точка с запятой ))
3) Являются ли эти видеоуроки современными для новой версии Android Studio, если нет, то что бы вы могли бы посоветовать для начального изучения в дополнение к этим урокам.
Спасибо за проделанную работу)) У вас отлично получается преподавать!!!
Почему нужно переменную button явно преобразовывать к виду Button если она и так этого вида?
дальше будет обработка по нажатию, а не по отпусканию? по моему touchLister
10/10.
Здравствуйте, а как перевернуть кнопки/текст ?
Есть еще и 4-й способ обработки нажатия кнопки, он чем-то похож на первый и второй.
Можно сделать анонимный внутренний класс, реализующий интерфейс OnClickListener:
В теле класса Activity -
public OnclickListener buttonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
myText.setText("нажата кнопка 4");
}
};
а назначать кнопке или кнопкам этот обработчик так:
button4.setOnClickListener(buttonClickListener);
У меня подчеркивается R (R.layout.main), может кто знает в чем дело? Спасибо, если поможете.
Все здорово. Но можно добавить обработку на одну кнопку повторным нажатием это часто используется отключение и включение или спикерфон и так далее.
Скажите какие данные со второй кнопки передаются в функцию onClick, я к тому что тут всего одна кнопка, а если их больше, то нужно будет как то инициализировать какая именно кнопка была нажата. Что принимает View view? И как это посмотреть? Можно ли получить данные с кнопки, ее ID, текст или какие нибудь другие атрибуты прописанные у кнопки?
ха, в следующем уроке судя по названию реализация)
При работе в MainActivity случайно что-то нажал, и стали отображаться примечания (// текст текст текст), которых очень много, и работу с кодом они сильно затрудняют. Подскажите, как их скрыть обратно?
скрин, пожалуйста
проблема решилась сама-собой. Толи при создании нового проекта большие примечания скрываются, или именно в том проекте были какие-то большие примечания, в общем работаю нормально.
Спасибо за ваш канал. Уроки хорошо организованы и интересно преподносятся. До этого урока все было наглядно и понятно. Да и этот урок в принципе не тяжело усвоить, но вот зашел я на ссылку по доп. материалу "События и слушатели" и тут стало все путаться. Написано все сугубо техническим языком, вот пример:
После генерации объект-событие пересылается для обработки зарегистрированному в источнике блоку прослушивания как параметр его методов - обработчиков событий.
Сказать честно, не понятно что тут написано. И как мне кажется для начинающего разработчика ПО на Андроид это не совсем легко усваивать.
Хотел бы попросить Вас, если это конечно возможно, преподносить материал не на техническом языке а на более простом и понятном, желательно на примерах.
И еще, есть ли разница между первым способом обработки нажатия кнопки и вторым? Если есть то в чем заключается отличие?
+Альберт Магомедов Хорошо, учту ваши пожелания. В свою очередь рекомендую больше читать тех. литературу, для понимания терминологии.
Большой разницы нет, можно использовать более удобный для вас на данном этапе.
+Start Android
Спасибо за вашу отзывчивость на комментарии. Дошел до 11 урока и понял, что для того что бы освоить андроид реально надо больше практиковаться и не останавливаться только на том что показано в уроках. И в самом деле весь запутанный клубок, как мне казалось, начал распутываться)). Просто я раньше в основном увлекался программированием на Delphi, поэтому представление немного другое. Спасибо за уроки и ваш труд.
Михаил Фленов "Библия Delphi" это для начала.
Delphi. Программирование для Windows, OS X, iOS и Android
Всеволод Леонов - Обучение мобильной разработке на Delphi (2015)
Ревич Ю. - Нестандартные приемы программирования на Delphi
Фленов "Программирование глазами хакера"
Delphi. Программирование для Windows, OS X, iOS и Android
автор Д. Л. Осипов
А где найти или чем заменить LargeText в новых версиях Андроид?
Просто сделал шрифт обычного текстового поля крупнее.
Не подскажите в чем проблема, после обновления студии, при загрузке студии пишет предупреждение
Warning:The project encoding (windows-1251) does not match the encoding specified in the Gradle build files (UTF-8).
This can lead to serious bugs.
Как с этим бороться ранее такого не было???
Alex Sas Поменял кодировку на UTF-8 начал писать кириллицей, как и положено.
Можно прописать не в xml коде, а в Properties найти тот же OnClick и написать название метода там.
View.OnClickListener onClick_button4 = new View.OnclickListener() {
textView.setText("Нажата кнопка 4");
}
button4.setOnClickListener(onClick_button4);
чем такой метод плох ?
я так делаю для удобства навигации в студии
Реклама слтшком часто показывается. А так норм. Для тех кто знаком с javascript почти все знакомо
Вам бы научится слепому методу набора текста, заодно и скорость подкачаете)
Денис Бушаев AS подтормаживает во время записи экрана при вводе. Слепой метод мне не поможет здесь.
+Start Android у меня она и без записи экрана подтормаживает) Хотя комп достаточно шустрый
Ребята, а кто подскажет, в каких случаях какой способ лучше использовать?
Я так понял что в способе 3 можно обработать нажатие всех 3-х кнопок. Сначала назначаем в xml файле всем кнопкам один метод onClick а потом в самом методе через Swich-Case прописывать действия ориентируясь по R.ib.button?
Я все правильно понял?
Павел Голубев Да так тоже можно
Извиняюсь за тупой вопрос, а почему 3м способом мы никак не обозначаем метод оnClick в методе onCreate??
Это разные методы. onCreate метод который запускается при запуске приложения, у вас методов в программе будет бесчисленное множество, какое им дело до того что происходит при запуске приложения? Т.е. по факту они никак не связаны, поэтому и обозначать их там никак не надо.
Подскажите в самом начале урока когда делаем описание объектов пропала команда TextView, как ее вернуть?
Написать снова)
Не правильно понял, она вообще исчезла из программы. Программа команду TextView не воспринимает. Пишешь Text появляется окошко с доступными командами и TextView там нет, а раньше была. Вот как теперь ее вернуть?
setText и textView подчеркнуто крассным
мне удобнее вводить в
SparseArray mButtons = new SparseArray();
и добавлять как пример
private void setButton(int i, int resources) {
mButtons.append(i, (Button) findViewById(resources));
}
setButton(0, R.id.button1);
setButton(1, R.id.button2);
setButton(2, R.id.button3);
mButtons.get(0).setOnClickListner(this);
ну дальше как по твоему примеру
Удачи
Кстате видел парни на неплохо вещают про android /user/elegionru/videos на ютубе
Спасибо за видео! А разве третий метод не надо где-то вызвать? Мы же его только создали, как я понимаю. Да и Андроид Студия о том же говорит)) Где лучше вызывать этот метод? Внутрь передаем все тот же объект textview, да?
В Delphi это реализуется на столько просто, что нет необходимости делать отдельный урок. Все делается в пару кликов. Почему в java так сложно?
интересно а как первым методом описать остальные кнопки? что бы менялся текст при нажатии ?
точно так же интересно как реализовать второй способ на все кнопки?
+Роман Романов в первом методе нужно просто создавать экземпляр класса слушателя, для каждой кнопки отдельно. Во втором методе, проверяешь имя аргумента View. Он будет соответствовать id кнопки. С помощью ветвления if, выполнять разные команды ("нажата кнопка 1", "нажата кнопка 2"...и т.д.). Второй способ не соответствует принципам ООП. Я бы не стал его использовать. Третий способ вообще без комментариев
public class MainActivity extends( (ActionBarActivity) - перечеркнуто). Как включить ?
Присоединяюсь, как сделать незачеркнутой.
"implements View.OnCLickListener" не дает выбрать того, что указано в уроке
Nikola Hirt перечеркнуто не значит отключено - просто этот элемент был объявлен ограниченной поддержки и вскоре может быть исключен из библиотеки (что врядли). Аналогично класс Date в Java - уже давно перечеркнут, но его используют на полную катушку, и исключать его явно не будут.
Evgen Orlovsky спасибо.
второй способ не работает, как выяснилось, ActionBarActivity устарел. Можете подсказать где почитать, какие теперь новые способы
Работает только что все проверил. Вчера установил студию проект на 30API android 11 (новее не бывает). Сделал как показано в уроке все отрабатывает. Точнее возможно вы правы и сейчас по умолчанию там не ActionBarActivity а AppCompatActivity но это не мешает там написать такую же конструкцию с implements View.OnClickListener
почему все объекты (расположенные на эскизе согласно урока) съехали в верхний левый угол? Или ConstraintActivity не лучший выбор для размещения?
+Сергей Захаров для начала лучше использовать RelativeLayout или LinearLayout. По Constraint смотрите отдельное видео, ищите здесь на канале.
Спасибо, наконец-то получилось
У меня нет TextFields Large Text - использовал Plain Text, только id объекта еще надо было переименовать (textView)
Спасибо огромное
Добрый день! Спасибо за уроки! Очень доходчиво для новичков)
Один вопрос: почему у меня вместо русских букв выводятся знаки вопроса? Когда английские буквы, то всё нормально.
+Евгений Заикин кодировку попробуйте переключить внизу справа, но лучше использовать строковые ресурсы ua-cam.com/video/RqCKvZBek90/v-deo.html
А еще такой вопрос, он конечно не по теме урока, но все же, буду благодарен если ответите. Я никогда не изучал Java, все что у меня есть в арсенале - это основы SQL, можно ли учить Java именно в процессе обучения Android разработки, или все таки сначала нужно изучить ее до какого-то уровня вне контекста Android Studio?
Или как вообще, что, куда, ааааааа, сложно все😂
Спасибо за ответ)
P.S. очень нравится что вы делаете!
Можно изучать параллельно
После этого урока я понял что ничего непонятно пока я не изучу хоть немного разметку Java.
Синтаксис, а не разметку
Подскажите,почему у меня очень медленно думает AS и сильно подтормаживает эмулятор?
Roman Babenko возможно, слабое железо, используйте Eclipse и Genymotion
Roman Babenko ua-cam.com/video/BgAgNBI498Y/v-deo.html
Спасибо
Я хотел узнать возможно ли программировать в android studio на языке c#?
+home game pc ксамарин используй
Первый и второй способ - это ровно одно и то же. С тем же успехом можно было еще сделать OnClickListener полем активити и установить его слушателем, так что это не считается. "Честных" способов из коробки два.
Для продвинутых: установку слушателя на кнопки можно с помощью аннотации @OnClick(R.id.my_view_id) из библиотеки ButterKnife.
Появилась странная проблема в Android Studio: не хочет переключаться с русского языка на английский. В остальных приложениях все ОК. Только в студии. Не подскажете в чем дело и как исправить?
+zodchiy такая же фигня, помогает перезагрузка студии только. Я думаю, это какая-то багушка в самой платформе IntelliJ IDEA, так как у меня так же себя ведет и PhpStorm. Возможно стоит написать разработчикам.
по третьему методу я бы сказал что это скорее стырили из JavaFX - там аналогично в FXML файле указывается обработчик (правда он в контроллере документа должен быть).
А можно сначала сделать в Sketchware,а потом код из Sketchware в Android Studio засунуть?)
1. Например, запись import android.widget.Textview; значит импорт класса Textview из системной библиотеки ОС Android. Вопрос, где можно посмотреть полный перечень доступных классов для использования из этой системной библиотеки OC (ссылку если не затруднит). Так понимаю для разных версий Android, количество классов которые можно использовать будет отличаться…
2. Запись Button button1;, понятно, что это объявление в коде кнопки которую мы создали. Но суть не совсем понятна. Когда мы объявляли, например, переменную int i; Тут ясно переменная i относится к целочисленному типу данных. Исходя из аналогии можно сказать, что button1 в вышеуказанной записи, относится к классу Button, но всё же, вопрос: чем является button1? Экземпляром класса Button?
Дмитрий Кошель 1) developer.android.com/intl/ru/reference/android/widget/TextView.html
2) да
Start Android Спасибо за ответ!
Третий способ самый классный, если с начало написать паблик воид б1 (виев виев) то потом при правке в хтмль онклик сам предлагает заполнить "б1"
Приложение запускается на эмуляторе или устройстве, но по нажатию на кнопку выдает ошибку и закрывает приложение.
Нашел решение этого? сам с этим сейчас висну
У меня было тоже самое в третьем способе. Ошиблась при добавлении класса в мэин_активити.java всего-то в регистре буквы одной...)))
у меня не выдает ошибок никаких. Просто вылетает приложение(будильник) при нажатии кнопки запустить. я уже с ума сошел, но не нашел решения проблемы
Ты наверное описание и инициализацию вьюшек делаешь вне фичи onCreate. Инициализация обязательно должна быть внутри
@@user-bn4br9yx8v try catch используй
помогите) Дайте ссылку на инфу что это? Что за особенность Java? Знаю только c# и так такого нет)))
OnClickListener oclBtnOk = new OnClickListener() {
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка ОК");
}
}; Почему интерфейс как объект? И при создание сразу внутри метод onClick? После С языка не могу понять.
btnOk.setOnClickListener(oclBtnOk);
Метод принимает объект интерфейса???
Прочитав про анонимные классы все понял)
у меня нет Large Text
android studio обновляется и иногда надо по 2-3 раза смотреть
а ImageButton так же можно обработать?
Похоже
Я как раз для практики ImageButton использую, пытаюсь сделать так, чтобы при нажатии на кнопку поменялось изображение другой кнопки на изображение нажатой.
button2.setOnClickListener(this); не понял этот метод
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText("qwert");
вот это понятно
Странно, в AS 3.4.1 Не ставился id элемента text, пока вручную не прописал, из за этого и код не работал( Под Android 5.1
А вот так ожил:
Main.xml
***
main.java
***
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button1;
Button button2;
Button button3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
View.OnClickListener clicButton1 = new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText("1");
}};
button1.setOnClickListener(clicButton1);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText("2");
}
});
}
}
Смогу ли я стать Junior Android Developer'ом, просмотрев все ~150 видео-уроков из этого плей-листа?)
Если просто смотреть, то вряд-ли. Нужно кодить самостоятельно, создавать свои приложения, читать документацию и код других разработчиков, делать ошибки и исправлять их.
Vsem dobrogo vremeni sutok. Kto mne podskajite kak ya mogu izmenit cvet knopki pri najatii na nee s odnogo cveta na drugoy ?
Nair Nairovi4 например, так: setBackgroundColor(getResources().getColor(R.color.holo_light_green))
Для чего было объявлять ссылку и искать ID на 3-ю кнопку?
Не совсем понял второй способ. Вторая кнопка слушает нажатие в своём активити -- тут всё понятно.
Но вот здесь:
public void onClick(View view) {
textView.setText("Нажата кнопка 2");
Откуда программа узнаёт, что при нажатии именно на вторую кнопку нужно выдавать именно этот текст? Никаких указателей же нет.
Для второй кнопки обработчиком является Активити. Поскольку это единственная кнопка с таким обработчиком, система ее определяет. Если бы было несколько, в методе onClick их нужно было бы определять по ID через switch. В дальнейших уроках, в основном, так и делаем.
Спасибо за ответ!
спасибо, искал ответ -- нашел в вашем же ответе на вопрос))). Отличные уроки!!!