Как использовать EventBus в Activity и Fragment на Android

В моем приложении я хочу использовать 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?
Как я могу это исправить?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
983
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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"), если у вас нет экземпляра фрагмента.

Я не знаю твоей второй части. Можете ли вы прислать мне коды с указанными выше кодами? пожалуйста, братан. Мне действительно нужна твоя помощь

Jungle 04.10.2018 10:57
MainFragment запускается с DetailActivity?
Khemraj Sharma 04.10.2018 11:05

Нет, мой брат, в моем Основная деятельность у меня есть 4 вкладки, а у MainFragment есть одна из этих 4 вкладок. в этом MainFragment у меня есть recyclerView для отображения некоторого списка с сервера, когда пользователь нажимает на один из этих элементов адаптер, показывает Подробно с кодом ниже: Intent intent = new Intent(context, RegisterInAuctionActivity.class); Intent intent = new Intent(context, RegisterInAuctionActivity.class);

Jungle 04.10.2018 11:10

Попробуйте EventBus.getDefault().post... в onDestroy из DetailActivity.

Khemraj Sharma 04.10.2018 11:13

Спасибо, когда пишите в метод вызова onDestroy. но почему бы не вызвать при использовании в OnBackPressed?

Jungle 04.10.2018 11:25

Я думаю, что ваше событие не запускается, потому что вы уже звоните finishWithAnimate.

Khemraj Sharma 04.10.2018 11:29

Другие вопросы по теме