我查看了有关此问题的所有问题和答案。但是我无法找到问题的答案。
我有Fragment
:MyFragment
。其中button
和textView
。我希望当我点击该按钮时,它会打开MyActivity
并带有两个按钮:cancelButton
和saveButton
。当我点击cancelButton
或saveButton
完成后,此Activity
和textView
中的MyFragment
将更改为我在MyActivity
中发送的内容,例如“取消点击”或“保存点击”。
我做了什么:
在MyFragment
:
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
@Subscribe
public void onSaveEvent(Message message) {
textView.setText(message.getMessage());
};
@Subscribe
public void onCancelEvent(Message message) {
textView.setText(message.getMessage());
};
在MyActivity
:
@OnClick(R.id.saveBtn)
public void saveClick(){
finish();
EventBus.getDefault().postSticky(new Message("Save clicked!"));
}
@OnClick(R.id.cancelBtn)
public void cancelClick(){
finish();
EventBus.getDefault().postSticky(new Message("Cancel Clicked"));
}
但它不起作用我认为是因为当我开始MyActivity
时,Event Bus
onPause()
中的注册表无法接收事件
我尝试使用接口,但它有效。但我希望用EventBus
我如何才能Event Bus
?
答案 0 :(得分:1)
您可以使用StickyEvents解决此问题。
在Fragment
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(Message message) {
Message stickyEvent = EventBus.getDefault().getStickyEvent(Message.class);
if(stickyEvent != null) {
tv.setText(message.getMessage());
EventBus.getDefault().removeStickyEvent(stickyEvent);
}
};
答案 1 :(得分:0)
根据this,您应该在onStart和onStop上注册和取消注册。
我认为您应该在活动中调用finish()之前发布事件。