В моем приложении я хочу использовать EventBus для вызова некоторых методов в другом виды деятельности.
Я хочу, чтобы при нажатии на backButton в activity (Подробно) вызывал один метод в fragment (MainFragment) .
в MainFragment у меня есть recyclerView и открываю этот activity (Подробно) с помощью recyclerView adapter.
Я пишу ниже коды в Подробно и MainFragment, но при нажатии на backButton, не вызывать метод в MainFragment.
Коды MainFragment:
public void onStart() {
EventBus.getDefault().register(this);
super.onStart();
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshAuctions(EventUpdateAuctionsState event){
Toast.makeText(context, "OK", Toast.LENGTH_SHORT).show();
}
Коды активности:
@Override
public void onBackPressed() {
finishWithAnimate();
EventBus.getDefault().post(new EventUpdateAuctionsState());
}
Коды состояния:
public class EventUpdateAuctionsState {
public EventUpdateAuctionsState() {
}
}
Почему бы не вызвать метод в MainFragment?
Как я могу это исправить?




Возможно, ваш фрагмент остановлен, когда событие запущено. Попробуйте зарегистрироваться, отмените регистрацию в жизненном цикле создания / уничтожения.
public void onCreate() {
super.onCreate();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
Предположение
Кстати, почему вы используете EventBus только для реализации обратной печати. Вы можете просто сделать это. Если ваш фрагмент является дочерним по отношению к DetailActivity.
@Override
public void onBackPressed() {
finishWithAnimate();
// get your fragment
if (fragment!=null) fragment.onRefreshAuctions();
}
Вы можете использовать getFragmentManager().findFragmentByTag("tag"), если у вас нет экземпляра фрагмента.
MainFragment запускается с DetailActivity?
Нет, мой брат, в моем Основная деятельность у меня есть 4 вкладки, а у MainFragment есть одна из этих 4 вкладок. в этом MainFragment у меня есть recyclerView для отображения некоторого списка с сервера, когда пользователь нажимает на один из этих элементов адаптер, показывает Подробно с кодом ниже: Intent intent = new Intent(context, RegisterInAuctionActivity.class); Intent intent = new Intent(context, RegisterInAuctionActivity.class);
Попробуйте EventBus.getDefault().post... в onDestroy из DetailActivity.
Спасибо, когда пишите в метод вызова onDestroy. но почему бы не вызвать при использовании в OnBackPressed?
Я думаю, что ваше событие не запускается, потому что вы уже звоните finishWithAnimate.
Я не знаю твоей второй части. Можете ли вы прислать мне коды с указанными выше кодами? пожалуйста, братан. Мне действительно нужна твоя помощь