Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Никита Гриб
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
#1

Реализация слушателя в виде анонимного внутреннего класса - Программирование Android

10.08.2014, 12:04. Просмотров 784. Ответов 5
Метки нет (Все метки)

Здравствуйте. Я новичёк в Андройде. Начал своё изучение с книги "Программирование под андройд" авторов Брайана Харди, Билли Филлипса. Я немного знаком с основными концепциями анонимнымных классов но никогда их не использовал их на практике. В программе испльзуется назначение слушателя таким образом:
Java
1
2
3
4
5
6
mTrueButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Пока ничего не делает, но скоро будет!
            }
        });
Не могли бы вы поподробнее описать механизм работы этого кода. Огромное спасибо. Если, что не так прошу поправлять. Первый раз задаю вопрос на форуме
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2014, 12:04     Реализация слушателя в виде анонимного внутреннего класса
Посмотрите здесь:

Static поле у внутреннего класса - Программирование Android
Есть класс, скажем Building, в нем есть еще один класс, скажем Floor. И вот этот Building хранит несколько экземпляров класса Floor. Что...

Ссылка на экземпляр объекта внутреннего класса - Программирование Android
Интересная вещь-если написать внутренний класс, например, DrawView, создать его в onCreate MainActivity, а потом, используя ссылку на него...

Сделать слушателя перехода на другую вкладку таба - Программирование Android
Доброго времени суток! Имеется статья: http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/ Сделал все по...

Класс: Хочу из класса WorkFiles получить доступ к функционалу класса WorkDB. - Программирование Android
Есть 3 класса: MainActivity, WorkDB и WorkFiles. Хочу из класса WorkFiles получить доступ к функционалу класса WorkDB. Файл...

Как изменить Textview из другого класса (класса адаптера RecyclerView) - Программирование Android
У меня есть список RecyclerView тоесть этот файл Basket и файл что реализует cardwiew BasketAdapter. как мне изменить TextView allPrice из...

Реализация анонимного класса - Java SE
ArrayList <String> Str = new ArrayList <String>(); В общем, пересмотрел кучу примеров в интернете где класс-тип коллекции (вместо...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
10.08.2014, 12:22     Реализация слушателя в виде анонимного внутреннего класса #2
Никита Гриб, это просто анонимная реализация интерфейса View.OnClickListener. Я бы посоветовал начать изучение с основ java, например, по Шилдту. Хотя бы первые страниц 250-300
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
10.08.2014, 13:11     Реализация слушателя в виде анонимного внутреннего класса #3
Цитата Сообщение от YuraAAA Посмотреть сообщение
изучение с основ java, например, по Шилдту
я до сих пор до книг не добрался, хотя уже год кодю... и вроде с основами сам разобрался!
если "на пальцах"... на кнопку назначается обработчик. Он может быть (назовем это) глобальным - определенным на весь класс и назначаемый (как в большинстве самоучителей) mTrueButton.setOnClickListener(this);. Или свой на каждую кнопку. Тогда вместо this нужно подставить переменную типа OnClickListener(). Ее можно определить заранее (и вотнуть в несколько кнопок) или прямо в setOnClickListener. Для редких кнопок с уникальными действиями это намного удобнее - компактнее код получается... разницы в скорости или ходе исполнения гобального и "частного" обработчика не встречал... вроде все... и не пришлось читать оглавлений и описания типов переменных на 250-300 страниц!
Никита Гриб
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
11.08.2014, 18:30  [ТС]     Реализация слушателя в виде анонимного внутреннего класса #4
Прочитал Шилдта до Обработки исключений включительно.

Добавлено через 17 часов 48 минут
Цитата Сообщение от Tester64 Посмотреть сообщение
я до сих пор до книг не добрался, хотя уже год кодю... и вроде с основами сам разобрался!
если "на пальцах"... на кнопку назначается обработчик. Он может быть (назовем это) глобальным - определенным на весь класс и назначаемый (как в большинстве самоучителей) mTrueButton.setOnClickListener(this);. Или свой на каждую кнопку. Тогда вместо this нужно подставить переменную типа OnClickListener(). Ее можно определить заранее (и вотнуть в несколько кнопок) или прямо в setOnClickListener. Для редких кнопок с уникальными действиями это намного удобнее - компактнее код получается... разницы в скорости или ходе исполнения гобального и "частного" обработчика не встречал... вроде все... и не пришлось читать оглавлений и описания типов переменных на 250-300 страниц!
Как я понял всё что находится в скобках метода SetOnClickListener это реализация того действия которое будет происходить при нажатии на кнопку. Что делает сам метод SetOnClickListener? Он принимает объект реализующий интерфейс OnClickListener и чего с ним делает?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
11.08.2014, 22:51     Реализация слушателя в виде анонимного внутреннего класса #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Никита Гриб Посмотреть сообщение
Как я понял всё что находится в скобках метода SetOnClickListener это реализация того действия которое будет происходить при нажатии на кнопку. Что делает сам метод SetOnClickListener? Он принимает объект реализующий интерфейс OnClickListener и чего с ним делает?
почти... SetOnClickListener - это процедура/метод кнопки, которая передает ей переменную с класом интерфейса обработчика... (жутко звучит). Обработчики этого интерфейса будут вызываться при нажатии кнопки. Этот интерфейс может быть встроен в класс активити (рядом с названием и обязательной переопределенным методом обработки). или определен в любом месте кода как

Java
1
2
3
4
5
6
View.OnClickListener my_on_clic1 = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Пока ничего не делает, но скоро будет!
            }
        };
Потом можно задать этот обработчик в кнопку как
Java
1
2
3
4
5
bt1.SetOnClickListener(my_on_clic1);
bt2.SetOnClickListener(my_on_clic1);
bt3.SetOnClickListener(my_on_clic1);
 
bt4.SetOnClickListener(my_on_clic_2); // другой обработчик

Можно сократить написание и избавиться от лишней переменной, определив ее прямо в момент установки
Java
1
SetOnClickListener( здесь! );
Как-то так... (Вы другие языки программирования знаете? Иногда проще провести аналогию, чем обьяснить новыми терминами сложные конструкции)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2014, 00:06     Реализация слушателя в виде анонимного внутреннего класса
Еще ссылки по теме:

Реализация общего слушателя - JavaFX
В программе есть 3 класса: интерфейс пользователя (jPanel), класс рабочего объекта и главное окно (jFrame с экземплярами интерфейса и...

Реализация в виде класса очереди с приоритетом. - C++
День добрый, возникла проблема с представлением требования от задачи: если разбирать по компонентом, то я понимаю что они из себя...

Реализация анонимного пользователя (Интернет магазин) - C# ASP.NET
Подскажите как в базе и в проекте реализовать САБЖ. можно ссылкой помочь или по пунктам вкратце. спасибо

Вызов метода внутреннего класса методом внешнего класса - C++
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про вложенные классы ничего, а задача в конце...

.NET 4.x Xml сериализация анонимного класса c# - C#
Написал расширение класса для сериализации объектов в xml /// <summary> /// Серелизовать объет в xml строку ...

Final для анонимного класса - Java SE
Добрый день уважаемые. Такой вопрос, почему в коде, например таком public static void main(String args) { String s = ""; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Никита Гриб
2 / 2 / 0
Регистрация: 10.08.2014
Сообщений: 36
12.08.2014, 00:06  [ТС]     Реализация слушателя в виде анонимного внутреннего класса #6
Цитата Сообщение от Tester64 Посмотреть сообщение
почти... SetOnClickListener - это процедура/метод кнопки, которая передает ей переменную с класом интерфейса обработчика... (жутко звучит). Обработчики этого интерфейса будут вызываться при нажатии кнопки. Этот интерфейс может быть встроен в класс активити (рядом с названием и обязательной переопределенным методом обработки). или определен в любом месте кода как

Java
1
2
3
4
5
6
View.OnClickListener my_on_clic1 = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Пока ничего не делает, но скоро будет!
            }
        };
Потом можно задать этот обработчик в кнопку как
Java
1
2
3
4
5
bt1.SetOnClickListener(my_on_clic1);
bt2.SetOnClickListener(my_on_clic1);
bt3.SetOnClickListener(my_on_clic1);
 
bt4.SetOnClickListener(my_on_clic_2); // другой обработчик

Можно сократить написание и избавиться от лишней переменной, определив ее прямо в момент установки
Java
1
SetOnClickListener( здесь! );
Как-то так... (Вы другие языки программирования знаете? Иногда проще провести аналогию, чем обьяснить новыми терминами сложные конструкции)
Всё стало понятно. Спасибо огромное за помощь.
Yandex
Объявления
12.08.2014, 00:06     Реализация слушателя в виде анонимного внутреннего класса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru