Метод подписки Otto не вызывается из действия во фрагмент в другом действии

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

void openNextActivity()
{
    manager.bus.post("Hi");
    // Intent to my next Activity
}

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

public class ProductListFragment extends BaseFragment  {

     String LOG_TAG = ProductListFragment.class.getCanonicalName();

     public static ProductListFragment newInstance() {
         ProductListFragment fragment = new ProductListFragment();
         return fragment;
     }

     public ProductListFragment() {
        // Required empty public constructor
     }

     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          getActivity().invalidateOptionsMenu();
     }

     @Override
     public void onResume() {
         super.onResume();
         BusProvider.getInstance().register(this);
     }

     @Override
     public void onPause() {
       super.onPause();
       BusProvider.getInstance().unregister(this);
    }

    @Subscribe public void onPostRecived(String s) {
       Log.d(LOG_TAG, s);
    }

}

Ошибок при получении ничего нет, однако, если я нажимаю кнопку на фрагменте и публикую оттуда некоторый контент, вызывается метод подписки. Например.

@OnClick(R.id.makePostCall) void call() {

     BusProvider.getInstance().post("Hi");
}

Я получаю соответствующий журнал этого звонка. Любая идея, где код идет не так?


person Arun Swaminathan    schedule 26.10.2015    source источник
comment
Отправка данных между действиями другим способом, чем использование намерений (startActivity/startActivityForResults/onActivityResults), вообще не имеет смысла... да, это упрощение, но подумайте таким образом: В вашем приложении живет только одно действие. ..   -  person Selvin    schedule 26.10.2015


Ответы (2)


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

person mr. Nutscracker    schedule 26.10.2015
comment
Можете ли вы объяснить, что именно вы имеете в виду? - person Arun Swaminathan; 26.10.2015
comment
Слушайте, сначала вы публикуете событие (manager.bus.post("Hi");), а затем начинаете другое действие. Ваше сообщение уже отправлено в шину событий и уже обработано при создании второго действия. Итак, вы должны сначала открыть другое действие, а затем опубликовать свое событие или использовать обработчик, jst, как в ответе выше. И да, вы должны связать свои аргументы, когда хотите передать их другому действию, а не публиковать их с помощью шины событий. См. это. - person mr. Nutscracker; 27.10.2015

вы отправляете сообщение до намерения; идентификатор BusProvider зарегистрирован после намерения; просто попробуй:

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        BusProvider.getInstance().post("Hi");
    }
},3000);
person tiny sunlight    schedule 26.10.2015