很多人刚接触Callback回调时应该是很懵的。
今天通过这篇文章,让你轻松了解什么是Callback回调。
首先看下官方的解释:
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调机制:
⑴定义一个回调函数;
⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;
⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
回调的通俗解释:简单的来说,就是把你自己包含了电话、QQ、微信的通讯簿交给别人,别人就持有了你的通讯簿。当别人有你需要知道的事情的时候,通过相应的渠道电话、QQ或微信告诉你。这就是回调。
回调的步骤只需4步:
1.定义一个接口类,定义需要的方法。
2.声明一个接口类对象,提供一个设置类对象的方法。
3.创建接口类对象,重写其中的方法,把该类对象,通过对方的方法传递过去,对方就持有了该对象
4.对方通过该对象,调用该类对象重写的方法,把值传递过来,相当于set了一个值过来。
下面用一个例子来说明这4个步骤,我们最常见的给RecyclerView添加点击监听回调事件。
1.定义一个接口类,里面定义需要的方法
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
2.需要在Adapter中声明一个OnItemClickListener接口类对象,对外提供一个设置OnItemClickListener对象的方法,相当于set方法。
protected OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
3.在Activity中,创建Adapter调用3中的setOnItemClickListener方法,传入OnItemClickListener的实例对象。
mBaseAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
//拿到对应的数据,进行处理
}
});
4.在Adatper中给对应的控件添加监听,然后通过OnItemClickListener实例对象,回调自己里面定义的方法,进行值的传递。
mConvertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(view,position);
}
}
});
这样就完成了一个完整的回调过程。
是不是很简单!