Craslythics несколько раз сообщал об этом сбое:
Fatal Exception: java.lang.RuntimeException: Unable to resume activity {com.example.myapp/com.example.myapp.view.MyFragment}: org.greenrobot.eventbus.e: Subscriber class com.example.myapp.view.MyPresenter already registered to event class com.example.myapp.event.MyEvent
Я не понимаю, как случилось, что мой класс MyPresenter уже зарегистрирован в EventBus и не знает, как воспроизвести сбой.
В MyFragment я регистрирую докладчика в onStart и отменяю его регистрацию в OnPause:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
presenter = new MyPresenter(this);
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(presenter);
}
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(presenter);
}
Фрагмент объявлен в XML-формате MyActivity:
<fragment
android:id="@+id/fragment"
android:name="com.example.MyApp.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:layout="@layout/my_fragment" />
И я получаю его от менеджера поддержки фрагментов в действии onCreate:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
}
Что я делаю не так?Как могло случиться, что функция фрагмента вызывается 2 раза без вызова onPause?