【问题标题】:How can an AppCompatActivity communicate with FragmentActivity using the EventBus?AppCompatActivity 如何使用 EventBus 与 FragmentActivity 进行通信?
【发布时间】:2019-02-02 14:09:02
【问题描述】:

问题,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();
 }
}

【问题讨论】:

    标签: android event-bus greenrobot-eventbus greenrobot-eventbus-3.0


    【解决方案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;
        }
    }
    

    现在将它用于您的活动

    在 Activtiy 中发帖:

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

    【讨论】:

    • 请纠正我,如果我错了,我不能从 MainActivity (EventBus.getDefault().postSticky(data);) 传递我的类成员变量“数据”?我看到,在我创建了一个表示字符串的类 (new DataChangeEvent(data)) 之后,你的示例就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多