今天讲讲android开发中比较常用的接口回调机制。
我自己对接口回调的理解就是:比如点击一个button的时候,如果你给button设置了一个监听器,即调用了方法:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
那么当我们点击button后就会回调OnClickListener接口的onClick()方法。我们可以在该方法里做你想做的操作,点击button后,该操作就会执行。很明显,button的点击事件其实就是一个简单的回调机制事件的体现。
还有很多其他的回调事件无时无刻都在发生着,比如你由一个Activity跳转到另一个Activity,那么这两个Activity的生命周期方法其实都是回调机制的体现。如果你还不理解的话,举个例子。
假如活动A中有个按钮,点击A中的按钮可以跳转到活动B,那么这时候活动A就会回调Activity生命周期方法中的:onPause()、onStop()方法,如果再由B返回A,那么A中就会回调生命周期方法中的:onRestart()、onStart()、onResume()方法。
在我们的与应用中,还有很多这样的体现。下面开始实际的接口回调的实现过程。
package com.example.circleimageviewtest;
/**
* 回调接口,声明一个抽象方法,方法具体实现在回调类里面实现
* @author Administrator
*
*/
public interface IF_CB {
// 抽象方法,不作具体实现,具体实现在回调类里重写的方法里面实现
void doSomething(String str);
}
/**
* btn是按钮控件
*/
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 创建LogSomething对象
LogSomething logSomething = new LogSomething();
// 调用LogSomething对象的HD()方法,在这里做回调
// 因为HD()方法里new了一个接口对象,所以要重写接口里的抽象方法,
// 在该方法中做你想要的操作
logSomething.HD(new IF_CB() {
@Override
public void doSomething(String str) {
// TODO Auto-generated method stub
Log.e("回调机制实现-->", str);
}
});
}
});
package com.example.circleimageviewtest;
public class LogSomething {
/**
* 该类主要是用来供回调类实现回调的方法类
* @param call_Back
*/
public void HD(IF_CB call_Back){
if(call_Back != null){
// 如果接口对象不为空,那么调用接口的抽象方法,具体实现还是在回调类里面
call_Back.doSomething("success!");
}
}
}
源码就不给出了,因为代码量很少,我建议大家自己去思考,去总结,相信有一天你们也会豁然开朗的。因为我有过这种感觉,很奇妙,原先怎么都不理解的东西,突然有一天懂了,会感觉很爽。