0

我第一次尝试实现 EventBus 来通信我的 SDK 21 的 MyActivity 的两个片段(更改 button.setEnabled)

这是我的 POJO 活动

public class ButtonEvent {

public final boolean status;
public ButtonEvent(boolean status){

    this.status=status;
}

}

这是触发事件的片段......

Fragment A
...//some code
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_a, container, false);
...//more code inside onCreateView
  btnChange.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
//HERE I POST THE EVENT
            EventBus.getDefault().post(new ButtonEvent(true));
}

这是接收(收听)事件的片段B...

FragmentB extends Fragment{
...//some code
@Override
// in method onCreate I register the subscriber
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(!EventBus.getDefault().hasSubscriberForEvent(ButtonEvent.class)) {
        EventBus.getDefault().register(this);
    }

}
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_b, container, false);
//...some other code
}
//HERE IS MI SUBSCRIBER
@Subscribe
public void onEvent(ButtonEvent event){

    btnNuevoMed.setEnabled(event.status);
    btnNuevoMed.setText("hELLOOO");
}

这是我的输出,但应用程序不会停止,但不会对我的 fragmentB 按钮进行任何更改:

D/EventBus: No subscribers registered for event class ar.com.titaves.consultoriosapp.servicios.ButtonEvent
D/EventBus: No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent

我的事件总线版本:

compile 'org.greenrobot:eventbus:3.0.0'

有类似的问题,但其中一些没有得到正确的答案,另一些是不同的情况 Activity-fragment 与 fragment to frament 的实现不同。

我的代码对吗?我错过了什么?为什么它不起作用,我该如何解决这个问题?提前致谢...

4

1 回答 1

0

这是一个样本..

          Fragment A
            ...//some code
             @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_a, container, false);
            ...//more code inside onCreateView
              btnChange.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
            //HERE I POST THE EVENT
                        EventBus.getDefault().post(new ButtonEvent(true));
            }
});
}

        @Subscribe
        public void onEvent(ButtonEvent event){

        }

    @Override
      public void onStart() {
        super.onStart();
        if (!EventBus.getDefault().isRegistered(getActivity())) {
          EventBus.getDefault().register(this);
        }
      }

      @Override
      public void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
      }

片段 B:

    FragmentB extends Fragment{
    ...//some code
    @Override
    // in method onCreate I register the subscriber
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_b, container, false);
    //...some other code
    }
    //HERE IS MI SUBSCRIBER
    @Subscribe
    public void onEvent(ButtonEvent event){

        btnNuevoMed.setEnabled(event.status);
        btnNuevoMed.setText("hELLOOO");
    }
 @Override
      public void onStart() {
        super.onStart();
        if (!EventBus.getDefault().isRegistered(getActivity())) {
          EventBus.getDefault().register(this);
        }
      }

      @Override
      public void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
      }
于 2017-08-02T18:37:07.817 回答