Как использовать EventBus в Activity и Fragment на Android - PullRequest
0 голосов
/ 04 октября 2018

В моем приложении я хочу использовать EventBus для вызова некоторых методов в других действиях .
Я хочу, чтобы при нажатии backButton в activity ( DetailActivity ) вызывался один метод в fragment ( MainFragment ).
в MainFragment У меня есть recyclerView и откройте это activity ( DetailActivity ) с recyclerView adapter.

Я пишу ниже коды в DetailActivity и MainFragment , но при нажатии backButton, не вызывать метод in 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();
}

DetailActivity коды:

@Override
public void onBackPressed() {
    finishWithAnimate();
    EventBus.getDefault().post(new EventUpdateAuctionsState());
}

EventUpdateAuctionsState коды:

public class EventUpdateAuctionsState {
    public EventUpdateAuctionsState() {
    }
}

Почему бы не вызвать методв MainFragment?
Как я могу это исправить?

1 Ответ

0 голосов
/ 04 октября 2018

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

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

...