2017-02-06 12 views
1

Раньше я играл с простыми вещательными слушателями в действии, там можно сделать что-то вроде textView.setText («текст»); Но слушатель стал довольно большим, чтобы остаться внутри, и я отнес его к отдельному классу. Мне нравится AA, я просто хочу продолжать управлять представлениями из текущей активности моего BroadcastReceiver, что я был отделен. Но когда я делаю что-то вроде:Как я могу ввести экземпляр Activity в свой BroadcastReceiver с аннотацией Android?

@EReceiver 
public class WarningActivityStateListener extends BroadcastReceiver { 
    @RootContext //or Bean 
    WarningActivity activity; 

У меня есть ошибка:

Error:(25, 2) error: org.androidannotations.annotations.RootContext can only be used in a class annotated with @org.androidannotations.annotations.EBean. 

Если я пытаюсь добавить @EBean выше, то у меня есть еще хуже:

Error:(27, 28) error: Something went wrong: Unexpected error in AndroidAnnotations 4.2.0! 
You should check if there is already an issue about it on https://github.com/androidannotations/androidannotations/search?q=java.lang.ClassCastException&type=Issues 
If none exists, please open a new one with the following content and tell us if you can reproduce it or not. Don't forget to give us as much information as you can (like parts of your code in failure). 

ответ

0

Вы не можете сделайте это, потому что ContextBroadcastReceiver является самим приемником, он не связан ни с одним Activity. Вы можете ввести приложение Context здесь с аннотацией @App.

EDIT:

Вы можете аннотировать метод в Activity с @Receiver, который будет обрабатывать прием Intent с и BroadcastReceiver регистрации/дерегистрации:

@EActivity 
public class MyActivity extends Activity { 

    @Receiver(actions = "org.androidannotations.ACTION_1") 
    protected void onAction1() { 
    // Will be called when an org.androidannotations.ACTION_1 intent is sent. 
    } 

} 

Или вы можете создать нормальный BroadcastReceiver, и отправлять события из своего метода onReceive в Activity через шину событий или LocalBroadcastReceiver.

+0

спасибо. Но как взаимодействовать с пользовательским интерфейсом в этом случае? Прежде чем использовать AA, я использовал для создания конструктора с моей функцией WarningActivity. В действии он выглядит как «private BroadcastReceiver stateReceiver = new WarningActivityStateListener (this);», а в приемнике это было как «public WarningActivityStateListener (ActivityActivity activity)» { \t \t this.activity = activity; \t} '- поэтому я мог бы использовать Activity для изменения видов. Пожалуйста, сообщите, как заменить его AA. – Eugene

+0

Я думаю, что IntentBuilder из приложения может помочь, но не знаю, как) – Eugene

+0

@Eugene я обновил ответ. – WonderCsabo

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

  • Нет связанных вопросов^_^