很多人刚接触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);
                }
            }
        });

这样就完成了一个完整的回调过程。

是不是很简单!