Обратные вызовы фрагментов против EventBus в Android

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

Существует еще один подход — использовать шаблон EventBus.
В действии

EventBus.getDefault().register(this);

Во фрагменте

EventBus.getDetault().post(new MyEvent(description));

И обрабатывать несколько типов событий в действии.

Может быть, здесь будет лучше использовать EventBus вместо подхода обратного вызова по умолчанию??
Или, может быть, это моя вина, что моя активность содержит много фрагментов (объект Бога), и лучше использовать действия вместо фрагмента?

Пожалуйста, предложите, какой подход лучше?


person CROSP    schedule 31.05.2015    source источник


Ответы (2)


Для простой иерархии одного действия в одну иерархию фрагментов обратный вызов — это самое простое решение. Но подумайте о Activity, содержащем Fragment, а Fragment содержит ViewPager, который можно прокручивать, и на каждой вкладке ViewPager есть Fragments A, B, C.

Фрагменты A, B, C отправятся в долгий путь, чтобы отправить событие в материнскую активность, и может быть потеряна связь интерфейса между активностью и дочерними элементами, когда они восстанавливаются во время сумасшедшие сложные танцы Android Activity-Fragment жизненного цикла. В этом случае хорошим выбором может стать шина событий, такая как otto.

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

person Youngjae    schedule 31.05.2015
comment
Не подскажет ли свойство sender в MyEvenet, кто инициировал событие? У ОП есть EventBus.getDetault().post(new MyEvent(description)); - person JustADev; 23.09.2016
comment
@OmarBizreh // да. что помогает. но мы должны помнить, что sender может быть null. - person Youngjae; 23.09.2016
comment
Я понимаю, поэтому единственный недостаток - это источник события, я собираюсь начать новый проект и использовать EventBus, есть ли что-то еще, что мне нужно проверить? До сих пор все ссылки SO, которые я видел, упоминали, что источник события, безусловно, является худшим недостатком. - person JustADev; 24.09.2016

Ваш подход interface великолепен, просто не отставайте от них и, возможно, попробуйте нарезать/сделать свой interface статичным и добавить все маленькие маленькие void и return method в этот интерфейс, чтобы вы могли просто реализовать один и вызывать функции.

EventBus? как насчет LocalBroadcastReceiver ? это вопрос предпочтений и того, какой из них, по вашему мнению, подойдет вам больше, в конце концов, если вы обрабатываете 10 000 запросов и ненавидите 100 interfaces, вы в конечном итоге будете использовать 1 и вкладывать 99.

и просто забыл, что лучше держать много Fragment вместо Activity, потому что, в конце концов, жизненный цикл Activity довольно сложно поддерживать, во-вторых, вы не можете на самом деле контролировать Activityies, все по сравнению с Fragments, а Fragment - хороший ведомый. , служит вам лучше

надеюсь, это ценно

person Elltz    schedule 31.05.2015