2013-08-23 3 views
2

У меня есть пользовательский вид EditText. Она распространяется по умолчанию один и добавляет возможность показать TimePickerDialogFragment, а NumberPickerDialogFragment и подобный ...Как автоматически отменить регистрацию пользовательского вида (из xml) на шине

Всех моих FragmentDialogs работают с системной шиной, чтобы сделать реплантации к родительскому деятельности ... ненужному

Обычно я регистрирую все объекты при создании и отмене их регистрации в onPause их родительской активности ... Для этого я использую ограниченную шину, которая сохраняет ссылки на все зарегистрированные объекты и автоматически регистрирует их в действии onPause. Эта работа оптимальна до сих пор. Все мои пользовательские классы используют конструктор, который получает ссылку на ограниченную шину ... Таким образом, класс должен только регистрироваться на ограниченной шине и больше не нужно отменить регистрацию, так как это будет автоматически.

Теперь регистрация моего пользовательского edittext не проблема, но как автоматически отменить его регистрацию? Я добавляю представления в XML, и я не хочу, чтобы их все вручную добавляли в мою ограниченную шину.

Есть ли у кого-нибудь идеи, как незарегистрировать можно как-то автоматизировать?

+0

Выполняете ли вы какой-либо интерфейс для приема событий шины или на основе аннотации? В обоих случаях вы можете onPause вашей деятельности ходить через детское дерево и отменить регистрацию, если они реализуют интерфейс или аннотированный метод. –

+0

Но мы для меня взгляды не должны знать о автобусе от точки дизайна. Фрагмент или активность должны управлять состоянием представлений на основе события. –

+0

это аннотация, основанная ... Я рассмотрю использование вашей идеи и проверку, если существует метод аннотации ... просто нужно посмотреть, как это можно сделать ... – prom85

ответ

1

Поскольку вы используете Отто. Вы можете посмотреть, как они находят @Subscribe методы: https://github.com/square/otto/blob/master/library/src/main/java/com/squareup/otto/AnnotatedHandlerFinder.java

С точки зрения дизайна (IMO) ваш взгляд смешивает две обязанности - некоторое представление пользовательского интерфейса и связь с нижними системными слоями. Правило здравого смысла - класс несет ответственность только за одну вещь.

Вы можете подумать об этом с другой точки зрения. Будет намного сложнее повторно использовать такие компоненты в любом проекте, который не использует шину. Подумайте о своем внутреннем дизайне, как будто вы собираетесь открывать исходные ваши системные компоненты.

+0

Вы правы, я немного смешиваю это. Но я удалил свои интерфейсы, потому что решил использовать систему шин, потому что для меня это имеет только преимущества ... Это делает мои диалоги намного проще ... И, конечно же, он не может использоваться повторно, если он не используется с шиной, но, с другой стороны, это намного проще использовать повторно, если использовать его с шиной ... Это на самом деле было моим решением ... – prom85

+0

Если вы держите автобус (как я хочу, потому что положительные моменты для меня гораздо важнее) у вас есть идея, как решить проблему? Фактически, я не вижу другого способа обработки события шины в классе представлений или обработки события шины в основном действии, с тем недостатком, чтобы каким-то образом найти соответствующие представления в событии шины, чтобы обновить его ... что должно выполняться в каждой деятельности вручную ... – prom85

+0

Конечно, некоторые вещи в вашем дизайне проще, но, кроме того, недостатки. Например, это отмена подписки, которая требует от вас писать собственные базовые действия с довольно сложными onPause и onResume. Существует не так много просмотров в фрагменте или средней активности, поэтому управление компонентами пользовательского интерфейса на модели формы события является предпочтительным для меня способом –