EventBus类似观察者模式:
当某个行为被执行时,通知观察者,改变某个变量,某个方法。
在EventBus中的观察者通常有四种订阅函数(当某个行为被执行时,被调用的方法)
1、onEvent //在当前线程执行,故不建议执行耗时操作
2、onEventMainThread //不管是哪个线程post触发,都会在UI线程执行,故不能执行耗时操作
3、onEventBackground //不管是UI线程,还是子线程触发,都会在子线程执行,故在UI线程触发时,会创建另一个新的字线程
4、onEventAsync //不管是UI线程,还是子线程触发,都会重新创建新的子线程
前提:下载EventBus的jar包,导包
总结:在接收类中注册销毁EventBus,并且可以实现四种订阅函数,在促发方法的类中只需要post()即可
1、自定义一个类,可以是空类,可以有属性,有构造方法等
/**
* Created by Administrator on 2015/7/31.
*/
public class PayForTotalMoney {
private String mMsg;
private double temp;
public PayForTotalMoney(String msg, double temp) {
// TODO Auto-generated constructor stub
this.mMsg = msg;
this.temp = temp;
}
public String getMsg(){
return this.mMsg;
}
public double getTemp(){
return this.temp;
}
}
2、在接收页面类中注册
//在要接收消息的页面注册
EventBus.getDefault().register(this);
3、在需要触发的类中把消息post后,在接收页面类中就会执行
EventBus.getDefault().post(new PayForTotalMoney("+",expandableListViewAdapter.getmList().get(groupPosition).getGroup_price()));
4、在接收页面类中执行
有四个方法,这里是其中一个
/*onEventMainThread(新建的类)对应的类来促发不同的方法, 总金额显示*/
public void onEventMainThread(PayForTotalMoney event) {
if (event.getMsg().equals("+")) {
ZONGJINE += event.getTemp();
} else if (event.getMsg().equals("-")) {
ZONGJINE -= event.getTemp();
} else {
ZONGJINE += event.getTemp();
}
tvtotal_money.setText("总金额:" + String.format("%.2f", Math.abs(ZONGJINE)));
}
5、在接收页面类中执行后,一定要记得在onDestroy中解除注册
@Override
protected void onDestroy() {
super.onDestroy();
//解除注册
EventBus.getDefault().unregister(this);
}
我现在主要是学习把各类中的属性设置为private型的
例如需要用到静态方法或者属性的,可以用EventBus
public static double ZONGJINE = 0.0;
这个就可以用EventBus解决,提高安全性
我是刚学习的菜鸟,做点笔记,有错的还望指导一二。