0

當我從FragmentA中觸發事件(在按鈕單擊時)時,我正在校正MyActivity的兩個片段,我想在FragmentB按鈕狀態中更改爲啓用true和textview setText(「新文本」),這些都在FragmentB中,當我運行我的APP輸出顯示沒有錯誤,但不進行任何更改 這裏是我的fragmentA至極觸發事件EventBus不會更新文本視圖或按鈕,並且不顯示任何錯誤?

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)); 
// HERE I PUT SOUT TO SHOW IF EVENT IS FIRED 
        System.out.println("YOU FIRED THE EVENT");// THIS MSG IS SHOWN CORRECTLY 
     } 
     }); 
} 

    @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); 
    } 

這裏是FragmentB

FragmentB extends Fragment{ 
...//some code 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_b, container, false); 
btnNuevoMed= (Button) rootView.findViewById(R.id.btnNuevoMed); 
    btnNuevoMed.setEnabled(false); 
    txtMed= (TextView)rootView.findViewById(R.id.txtMed); 
//...some other code 
} 
//HERE IS MI SUBSCRIBER 
@Subscribe 
public void onEvent(ButtonEvent event){ 
// HERE I PUT A SOUT TO SHOW IF REACH THE METHOD 
System.out.println("YOU ARE HEREEEEE"); //BUT NEVER REACH THIS METHOD . WHY? 
    btnNuevoMed.setEnabled(event.status); 
    btnNuevoMed.setText("hELLOOO"); 
    txtMed.setText("Modification Success"); 
} 
@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); 
    } 

,這是我的按鈕XML

<TextView 
     android:id="@+id/txtMed" 
     android:text="MEDICACION" 
     style="@style/textoTitulos" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal"/> 

<Button 
     android:text="Nuevo Boton" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/btnNuevoMed" 

     /> 

即時通訊使用eventbus 3.0.0。我的代碼有什麼問題?我怎麼能解決這個問題?爲什麼我無法達到傾聽者的方法?在此先感謝..

回答

0

試試這個:

在這樣

EventBus.getDefault().postSticky(new ButtonEvent(true)); 

在片段B-片段A後註冊事件訂閱類似這樣的:

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true) 
public void onEvent(ButtonEvent event){ 
    // 
+0

,謝謝,我試試你的代碼但它粉碎輸出顯示此錯誤:org.greenrobot.eventbus.EventBusException:訂閱服務器類ar.com.titaves.consultoriosapp.views.fragmentsPaciente.FragmentB已註冊到事件類ar.com.titaves.consultoriosapp .servicios.ButtonEvent。在我的FragmentB的Strart方法中,你能幫助我嗎?謝謝 – matQ

+0

做一件事。在原始代碼片段B中使用!EventBus.getDefault()。isRegistered(this)而不是getActivity()。刪除粘性的東西。 – Embydextrous

+0

I/System.out:你在這裏 I/System.out:你開始了這個活動。這是我的新輸出,所以現在它首先得到FragmentB用戶並顯示它的味精,然後是FragmentA的sout,這意味着它們以反轉順序執行,但是ir進入FragmentB用戶方法,它不會更改按鈕和txtview – matQ