Проблема: в Android нельзя “повесить” на один View – больше одного листенера, как в обычных Java-приложениях. Решение – композитный паттерн.

Home » android » Android Frontend » Проблема: в Android нельзя “повесить” на один View – больше одного листенера, как в обычных Java-приложениях. Решение – композитный паттерн.
Android Frontend, паттерны проектирования Комментариев нет

Проблема

то делать, если на один объект GUI(например View) нужно повесить несколько слушателей(Listener)? В Обычных, десктопных java-приложениях со стандартными пакетами, проблем с этим не возникает. Но, в Android, к сожалению, прикрепить к одной View больше одного слушателя – невозможно. Вернее, это возможно, но перехватывать события, будет лишь последний из прикрепленных к View слушателей. Так что же делать?

Решение

Решение проблемы, не сложное, нам поможет – Композитный паттерн. (Суть паттерна на вики, проблема и дискуссия на стеке)
Все что нам необходимо, всего лишь,- создать класс композитного слушателя, содержащего переменную экземпляра – коллекцию слушателей. Переопределить в этом классе основной обрабатывающий метод(в примере onClick), так, чтобы он создавал слушателей для каждого элемента коллекции. Далее, чтобы применить паттерн, нам нужно будет создать экземпляр композитного слушателя, и добавить в его коллекцию слушателей все необходимые слушатели.

Класс композитного слушателя:

Создаем композитного слушателя, регистрируем в нем слушателей, регистрируем сам композитный слушатель.

Таким образом, суть композитного паттерна создании некоего объекта, который содержит в себе несколько объектов схожего с объектом-контейнером типа(объект родитель и дочерние объекты одного супертипа). Причем когда действует этот композитный объект, это равносильно тому, как если бы действовали вместе те объекты, которые он содержит.

LEAVE A COMMENT