0

问题,AppCompatActivity 如何使用 EventBus 与 FragmentActivity 进行通信?

结果发现,FragmentActivity 可以和 AppCompatActivity 通信,调用了 onEvent 方法,但是如果我们把通信路径切换到 AppCompatActivity 和 FragmentActivity 通信,永远不会调用 onEvent 方法。

public class MainActivity extends AppCompatActivity{
 private String data;
 @Override protected void onCreate{
  data = "private String data from MainActivity";
  EventBus.getDefault().postSticky(data);
 }
}

public class AccountFade extends FragmentActivity{
 private String mAccountFadeData;
 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
 public void onEvent(String s){
  Toast.makeText(this, "private String mAccountFadeData from MainActivity", Toast.LENGTH_LONG).show();
  this.mAccountFadeData = s;
 }

 @Override protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  EventBus.getDefault().register(this);
 }

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

1 回答 1

1

您必须创建包含一个字符串变量的类并通过 EventBus 触发该类。

所以首先像这样创建类

public class DataChangeEvent {
    private String data;

    public DataChangeEvent(String data) {
        this.data = data;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

现在将其用于您的活动

在活动中发布:

 EventBus.getDefault().postSticky(new DataChangeEvent(data));

进入 FragmentActivity :

 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
 public void onEvent(DataChangeEvent event){
      Toast.makeText(this, "private String mAccountFadeData from MainActivity", Toast.LENGTH_LONG).show();
      this.mAccountFadeData = event.getData();
 }
于 2019-02-02T14:39:00.053 回答