0

我第一次試圖實現EventBus到comunicate 兩個片段MyActivity(改變button.setEnabled) 我的SDK 21兩個片段之間的EventBus通信顯示沒有訂閱者註冊事件類別..?

這是我的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)); 
} 

這裏是fragmentB至極接收(聽)事件......

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 

我eventbus版本:

compile 'org.greenrobot:eventbus:3.0.0' 

有similiar的問題,但他們中的一些沒有得到正確的答案,其他都不同的情況下活動片段是不一樣的implem誘惑比碎片來分裂。

我的代碼是否正確?我錯過了什麼?爲什麼它不工作我怎麼能解決的問題?在此先感謝...

+0

我覺得你忘了爲FragmentA創建用戶,請看看。 –

+0

@SachinVarma這兩個片段必須不僅創建用戶正在監聽的fragmentB?你能告訴我如何以及在哪裏編碼嗎? – matQ

+0

是的,你必須創建用戶的片段A也 –

回答

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); 
     } 
+0

我嘗試你的代碼,輸出問題得到解決(沒有訂戶註冊事件類..)沒有錯誤,但我的按鈕不會更新從啓用(false)到真的,我知道這是另一個問題,但你知道爲什麼我的fragmentB不更新我的按鈕狀態或刷新片段?無論如何感謝 – matQ

+0

或shuld我在fragmentA Subscriber方法中添加一些代碼?或者只是把它留空?因爲沒有錯誤但沒有發生,並且改變 – matQ

+0

謝謝我會問一個新問題 – matQ