相信Android的同志們都知道這個玩意,github16k的存在神器,但是這幾天遇到一個問題,在一個activity中如果發(fā)送事件到另外一個activity中,因為另外一個activity還沒有初始化,導(dǎo)致了消息沒有接受到的問題,在查看eventbus的文檔后,發(fā)現(xiàn)3.0有增加了一個方法。先看看最基本的使用方法吧,先上EventBus的github地址https://github.com/greenrobot/EventBus
1、引入姿勢
compile 'org.greenrobot:eventbus:3.0.0'
二、使用姿勢
1)自定義一個類,可以是空的
public class MyEvent {
private String data;
public MyEvent(String data){
this.data = data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
(2)、在接受消息的頁面進行注冊
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
(3)、解除注冊,也是在接受消息頁面,和注冊對應(yīng)
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
(3)、在接受頁面定義接收方法
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMainEvent(MyEvent event){
Log.e("123", "接受到的數(shù)據(jù)"+event.getData());
}
(4)、在另外的頁面進行發(fā)送消息
@Override
protected void onActivityCreate(Bundle savedInstanceState) {
TextView tv = (TextView) rootView.findViewById(R.id.login_ll);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post("event");
}
});
}
點擊按鈕發(fā)送消息。以上就是eventbus的簡單用法。
下面來說下我遇到的問題,在一個A的activity中發(fā)送消息,在B的Activity中接收,但是A的activity發(fā)送消息,但是不一定進入到B中,但是有時候需要去B中看數(shù)據(jù),用上面的辦法發(fā)送消息突然發(fā)現(xiàn)沒有辦法搞定。然后查看發(fā)現(xiàn)用eventbus的粘性事件可以搞定。
1、注冊和注銷事件是一樣的
2、發(fā)送事件
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
3、接收事件
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {
textField.setText(event.message);
}
用完以后發(fā)現(xiàn)有個問題,就是一旦發(fā)送事件以后,在進入到接收消息事件的頁面就會觸發(fā),有時候事件是短暫性的,沒必要一直存在,查閱文檔后發(fā)現(xiàn),粘性事件可以清除。
清空事件
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
// "Consume" the sticky event
EventBus.getDefault().removeStickyEvent(stickyEvent);
// Now do something with it
}
其他需求也可以這么玩
MessageEvent stickyEvent = EventBus.getDefault().removeStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
// Now do something with it
}
好了,搞定了,希望這些能給有用的人幫助。
最后附贈幫助的地址:http://greenrobot.org/eventbus/documentation/configuration/sticky-events/