Fragment 一经推出,就广泛的使用在项目中,在适配方面,减少代码冗余方面大有助益,那么Fragment和Activity如何交互呢,我所知的有,通过fragment.setxxx(),((类型转换)getActivity).setxxx(),eventbus等等,那么是否可以通过回调让Activity和 Fragment及时交互呢?
首先讲一下我对回调的理解,A要完成某件事情,但是他没法完成,需要委托B去完成,B完成了告诉A完成的情况。
举一个列子,在办理银行卡的时候,有时候会开通短信服务,当你的银行卡中钱发生变化的时候 就会及时通知你,这就相当会 客户给银行设置了一个监听,这个监听一直在等待,钱有变化了 就回调出结果,如果你不设置监听,钱变化了,自然也不会及时通知你
写一个简单的例子:
MoneyCallBack 作为一个接口,主要用于监听银行卡中钱的变化,相当于定制的短信服务
package callbackDemo;
/**
* @author why 小二
* 短信业务
*
*/
public interface MoneyCallBack {
void savaMoney();//短信通知用户存钱了
void spendMoney();//短信通知用户消费了
}
Bank 作为一个银行类主要用于处理存钱,取钱 啥啥啥的金融业务,当用户的钱发生 变化时,如果用户办理了短信服务,通知用户钱发生了变化,这里的短信服务相当于上面的MoneyCallBack,如果不设置,当然也就不通知了
package callbackDemo;
/**
* @author why
* 银行
*
*/
public class Bank {
MoneyCallBack mCallBack;
int mMonthCount=12;// 办理短信服务的月数,一般为12个月
public void setCallBack(MoneyCallBack mCallBack) {
this.mCallBack = mCallBack;
}
public void getMoney(){
new Thread(){public void run() {
for (int i = 0; i < mMonthCount; i++) {
if (mCallBack!=null) {
mCallBack.savaMoney();
mCallBack.spendMoney();
}
}
};
}.start();
}
}
Client作为 办理银行业务的自由人,可以办理任何业务
package callbackDemo;
/**
* @author why 小二
* 客户
*
*/
public class Client {
public static void main(String[] args) {
Bank bank=new Bank();
//定制短信服务
bank.setCallBack(new MoneyCallBack() {
@Override
public void spendMoney() {
System.out.println("尊敬的客户,你存入了钱");
}
@Override
public void savaMoney() {
System.out.println("尊敬的客户,你消费了钱");
}
});
bank.getMoney();
}
}