GlobalContext.getBusInstance().post(msg);
3. 接收者(Subscriber)
接收者可以是Activity,也可以是Fragment,还可以是Service。
我们以Fragment为例进行操作.
public class SMSControlFragment extends Fragment {
Bus bus = GlobalContext.getBusInstance();
@Override public void onAttach(Activity activity) {
super.onAttach(activity);
bus.register(this);
}
@Override public void onDetach() {
super.onDetach();
bus.unregister(this);
}
@Subscribe public void getMessage(SmsMessage s) {
mTvNumber.setText(s.getOriginatingAddress());
mTvMessage.setText(s.getMessageBody());
}
}
订阅者是Fragment,发布者是SmsReceiver,消息内容是SmsMessage。
通过以上操作,一个使用OTTO的消息传递总线就完成了。
4.综合demo
下面的Demo, 仅为了让大家知道“事件”被产生了之后,post出来,所有订阅了该事件的类都会接到该事件,接受的先后顺序,不由我们控制!
public class MyActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
findViewById(R.id.button_change).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BusProvider.getBusInstance().post(new DataChangedEvent("this is changed String"));//发布事件
}
});
}
@Override
protected void onResume() {
super.onResume();
BusProvider.getBusInstance().register(this);//注册
}
@Override
protected void onPause() {
super.onPause();
BusProvider.getBusInstance().unregister(this);//注销
}
@Subscribe //订阅事件DataChangedEvent
public void sayGoodOnEvent(DataChangedEvent event){
Log.e("event", "good");
}
@Subscribe //订阅事件
public void sayBadOnEvent(DataChangedEvent event){
Log.e("event", "bad");
}
@Produce //产生事件
public DataChangedEvent produceDataChangedEvent(){
return new DataChangedEvent("this is changed String");
}
}










