2013-11-19 4 views
1

Я пытаюсь передать событие из фрагмента в диалог с помощью otto. К сожалению, к моменту создания диалога событие уже запущено, и метод @Subscribe в моем диалоговом окне и данные, которые были отправлены, передаются.Использование Отто для двунаправленной связи с диалогом

Данные, которые я пытаюсь передать, - это объект и индекс (лучший случай) или строка (худший случай) из списка/ArrayList.

Я знаю, что у них есть метод @Produce; но я не понимаю, как метод, который не принимает аргументов, в любом случае или как я могу заставить его работать.

Вот пример они обеспечивают

@Produce public AnswerAvailableEvent produceAnswer() { 
    // Assuming 'lastAnswer' exists. 
    return new AnswerAvailableEvent(this.lastAnswer); 
} 

Для моего недавно созданного диалога this.lastAnswer; не будет, он не может - это то, что я передаю. Так как мне обойти это?

Боковое примечание: Я думаю, что автобус событий в его текущей форме немного переборчив, так как он только общается с моим диалогом. Позже я надеюсь использовать шину событий в большей диалогово-цифровой связи.

ответ

0

Я также задал тот же вопрос для себя, когда я изучал Отто. И решил задумчиво прочитать их сайт (http://square.github.io/otto/). Вот их описание под @Produce аннотации:

... Производителей, как абоненты, также должны быть зарегистрированы ... При регистрации, метод производителя будет вызывается один раз для каждого абонента ранее зарегистрированным для тот же type. Метод-производитель также будет вызываться один раз для каждого нового метода , который подписывается на событие того же типа.

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

Поэтому я думаю, что вовремя, когда вы зарегистрируете своего продюсера, «lastAnswer» должен быть инициализирован. И никаких параметров не требуется, потому что вы не можете сами назвать свой метод-производитель. Надеюсь, это поможет.

+0

lastAnswer никогда не будет инициализирован в моем сценарии. Я передаю данные из моего фрагмента в диалог, поэтому нет (последний раз). Хорошие мысли, хотя! Я буду помнить об этом в следующий раз, когда я погружусь в андроид. –

+0

Извините @ xphill64x, может быть, я не понимаю, если вам не нужно проходить в диалог «lastTime», создайте событие, не передавая его в конструкторе. – molokoka

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