2015-03-13 2 views
0

У меня есть рабочий код, но мое решение не кажется оптимальным. Мой вопрос в том, что для этого есть шаблон дизайна comon, который я мог бы использовать вместо этого.Дизайн шаблона для общего вида наложения

У меня есть 4 разных вида деятельности, все делают воспроизведение звука. У меня есть один общий класс (Player), который управляет воспроизведением, поэтому, когда активность хочет воспроизвести, он вызывает только один экземпляр Player.

Независимо от того, который Activity активна в данный момент я не хочу, чтобы отобразить один и тот же вид наложения с воспроизведением информации/управления и т.д. Это я решаемой создать макет PlayerView.xml который я include в каждом Activity макете.

Последнее, что у меня есть PlayerListener, который я зарегистрирую на проигрывателе, чтобы получать уведомления о воспроизведении. Когда PlayerListener получает уведомление, он изменяет PlayerView в текущем активном Activity (например, устанавливает имя дорожки воспроизведения в TextView в PlayerView).

Для того, чтобы PlayerListener знать, какие Activity, что является в настоящее время активный он имеет метод setParent(ViewGroup parent) который каждый Activity вызовов как при создании и в onResume, чтобы установить свой собственный родительский макет для слушателя. Затем PlayerListener добавляет слушатели для каждого компонента (например, Button) в PlayerView.xml и удаляет слушателей для родителя с предыдущего Activity.

мне кажется неэффективным, что я за каждое изменение между деятельностью необходимо добавить/удалить кучу слушателей, но (afaiu), поскольку каждый include создает копию ссылочного макета, означая PlayerView является уникальным в макете оно Я должен сделать это таким образом (возможно, пропустить удаление слушателей, но это может создать проблемы с производительностью при увеличении количества действий).

Я понимаю, что у меня есть суперкласс класса, который делает это в одном месте, но это не устраняет потенциальную проблему постоянного добавления/удаления слушателей. Есть ли лучший, стандартный способ сделать это?

Спасибо!

ответ

0

Стандартный шаблон для этого используется фрагменты.

+0

Я думал, что у фрагментов будет такая же проблема с добавлением/удалением слушателей, когда они будут разделены между различными действиями, но, может быть, я неправильно понял это ...? – jola

0

Хорошо, прочитав больше о фрагментах, я теперь думаю, что понимаю, что в Android нет общего шаблона для чего я пытаюсь добиться. В самом деле, я могу добавить один и тот же фрагмент к нескольким действиям, но каждый фрагмент становится новым экземпляром и просто живет в рамках Activity, передавая информацию состояния между фрагментами, так же, как и для Activity.

Итак, каждый экземпляр фрагмента должен иметь добавленные слушатели, если они должны слушать, например. события из Сервиса, к сожалению, у вас не может быть одного экземпляра фрагмента, который живет в нескольких действиях. Который я бы понял, если бы нашел эту тему: Retain Fragment state between Activities

Смежные вопросы