在Android学习中经常会遇到回调函数这个概念,但很多读者对于回调函数的认识是不大清楚的。从定义说起估计很多读者又会被绕晕了,这里就举一个常见的例子,按键的点击事件就是就是经典的点击事件。点击事件触发onClick()方法,onClick()处理逻辑有开发者自行实现,其实质就是接口编程。回调函数在自定义View时尤为常见,在其他场合也很实用。下面我们就那Button的点击事件作为例子讲解如何去实现自定义回调函数。
1、自定义一个接口:
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
接口内部的函数就是我们可以回调的函数,并不局限与一个,很多控件是有多个回调函数得,这个根据实际情况定义,当然接口的名字也是自定义的,命名最好遵循命名规则,可以参考上面的OnClickListener。
2、定义一个接口的引用
public OnClickListener mOnClickListener;
3、创建一个函数创建一个接口的对象
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
mOnClickListener = l;
}
4、调用回调方法
public boolean callOnClick() {
if (mOnClickListener != null) {
mOnClickListener.onClick(this);
return true;
}
return false;
}
这里要注意对mOnClickListener 进行判空。
5、在程序中使用
ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//实现自己的逻辑
}
});
上面就是大家很熟悉的按键点击事件了。
笔者在项目中也多次用到了回调函数,特别是在抽取工具类的时候,要在工具类中回调某些方法,但逻辑又要在其他界面中实现,如果不抽取成工具类,就会增加很多重复的代码。所以回调函数也能很大程度上使代码更加简洁。