彻底理解Android的回调机制 看不懂打我
短信预约 -IT技能 免费直播动态提醒
整篇都将使用例子来讲 看懂例子的注释即可,分为两个例子大同小异 看懂一个可以作类比,要理解深刻还是要自己敲一遍/。/
public interface ICallBack{//商家0提供的接口(顾客可以在这点自己想吃的菜)
//回调函数
void postExecute(); //商家0提供的下单功能(给顾客使用)
}
public interface ICallBack1{//商家1
void postExecute();
}
public class EatWhat { //饿了么软件 专门给商家和顾客提供回调的场景,实际是系统提供给
//用户使用的
private ICallBack callBack; //商家0的店
private ICallBack1 callBack1;//商家1的店
public void setCallBack(ICallBack callBack){//通过饿了么找到对应的商家
this.callBack=callBack; //由顾客来实现
}
public void setCallBack1(ICallBack1 callBack1){//同上
this.callBack1=callBack1;
}
public void eatSth(){ //饿了么将顾客的单子给商家去实现
if(callBack!=null){
callBack.postExecute();
}
if(callBack1!=null){
callBack1.postExecute();
}
}
}
public class Test{ //具体的回调场景:顾客:-->打开饿了么-->打开对应商家-->填写订单
// -->通过饿了么将顾客的回调函数给商家去执行(执行订单)
public static void main(String...args){
//现在有一个顾客在家呆着 不能出去 需要吃饭,于是客人(new 一个)打开饿了么
EatWhat eatWhat=new EatWhat();
eatWhat.setCallBack1(new ICallBack1() {//顾客喜欢商店1并同时接写好了订单内容,
//
@Override
public void postExecute() {
System.out.println("我已经想好了 我要吃你家的辣椒炒肉");//填写订单信息
}
});
//确认订单 此时调用eatSth()是会调用顾客自己实现的回调方法即--->要吃辣椒炒肉
eatWhat.eatSth();
}
}
商家具体逻辑
:商家暴露对应的下单功能:postExecute();
,
:饿了么软件上提供商家的成员变量
顾客具体逻辑
打开软件:
new EatWhat();
点开具体商家并同时写下自己的订单信息:
setCallBack(new ICallBack1(){ .. });
顾客通过饿了么提交订单
eatWhat.eatSth();
看到这里再深入思考一下:
回调函数:
说白了还是函数的使用 函数的使用说具体点 就要扯到函数指针,而在不同的函数 得到指针的方法不同,上面的例子就是通过
setCallBack(new CallBack(){})来实现给指针赋值
,实现了调用函数的功能。
二、现在再看以下android
里面的回调,会不会很熟悉了呢,一样看代码
public interface OnClickListener {
void onClick(View v);
}
public void setOnClickListener( OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l; //将自己实现的监听者加入监听者数组中
}
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() { //给指针赋值
@Override
public void onClick(View v) {
System.out.println("我要吃辣椒炒肉");
}
});
}
}
对比两个代码第二个会发现少了实现 其实当我们点击按钮时,系统已经帮我们实现了点击事件,不然怎么会叫做监听呢。
后续还会完善 如有不足 多多包涵!
作者:CZ_WL
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341