Как использовать greenrobot для передачи данных в действие или фрагмент, который еще не был инициализирован?
Я попытался использовать данные переноса greenrobot между действиями и фрагментом, но я не смог найти подходящий учебник, который показывает, как это сделать подробно.
Основываясь на том, что я прочитал до сих пор, я написал кое-что вроде этого, но он не работает. Как я могу использовать зеленый робот для передачи данных в действие или фрагмент, который еще не был инициализирован?
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().post(new String("We are the champions"));
Intent intent = new Intent("com.test.Activity_Lessons");
startActivity(intent);
}
Activity_Lessons:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Some initializations
EventBus.getDefault().register(this);
//Other Stuff
}
public void onEventMainThread(String s){
Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show();
}
Обработчик событий никогда не вызывается здесь. Что я делаю неправильно?
Ответы
Ответ 1
EventBus имеет два метода для публикации и регистрации событий. В случаях, когда активность или фрагмент еще не инициализированы, мы можем использовать registerSticky и postSticky вместо регистрации и публикации.
вот мой собственный исправленный код:
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().postSticky(new String("We are the champions"));
Intent intent = new Intent("com.test.Activity_Lessons");
startActivity(intent);
}
Activity_Lessons:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Some initializations
EventBus.getDefault().registerSticky(this);
//Other Stuff
}
public void onEventMainThread(String s){
Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show();
}
Ответ 2
Я думаю, что вы забыли зарегистрировать свою деятельность.
попробуйте добавить следующее:
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().post(new String("We are the champions"));
EventBus.getDefault().register(this);
Intent intent = new Intent("com.test.Activity_Lessons");
startActivity(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
Ответ 3
Ответ Armin (первый ответ проверен как принятый).
Но если вы используете EventBus 3.0.0 (это последняя версия на данный момент) или выше, вы не можете использовать это:
EventBus.getDefault().registerSticky(this);
Это потому, что метод registerSticky устарел и удален, вы можете просто использовать метод register следующим образом:
EventBus.getDefault().register(this);
Надеюсь, это поможет разработчикам использовать современные библиотеки и технологии.
Ура!
Ответ 4
Чтобы добавить ответы Армина и Дэвида, я сделал postSticky
работу только после написания аннотации подзаголовка следующим образом:
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
как указано в документах EventBus для Важные события