回调函数通俗讲,就是为了一些自己写的,用给别人来调用的函数。
我还看到一些其他人写的定义:所谓回调,就是对象A调用另一对象B中的某个方法b,然后B又在某个时候反过来调用A中的某个函数c,对于B来说,这个c便叫做回调函数。回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口。
一、最简单的回调函数
1.在要调用的业务操作中,创建一个接口,在接口中创建方法,这个方法表示的是我们原先要在业务类中执行的操作
注意:接口中的方法都没有实现体
public interface BackUpSmsListener {
/**
* 设置总进度
*
* @param max
*/
public void max(int max);
/**
* 设置当前进度
*
* @param progress
*/
public void progress(int progress);
}
2.将接口以参数的形式传递给业务方法,并在业务方法中,执行接口中的方法,将获取的值设置到接口方法中
public static void getAllSMS(Context context,BackUpSmsListener listener){
listener.max(count);
listener.progress(progress);
}
3.在activity中调用业务方法,创建一个接口,并实现接口中的方法,同时在接口的方法中就可以获取我们想要的数据
new Thread(){
public void run() {
SmsEngine.getAllSMS(getApplicationContext(),new BackUpSmsListener() {
@Override
public void progress(int progress) {
//progressDialog.setProgress(progress);
pb_atool_sms.setProgress(progress);
}
@Override
public void max(int max) {
//progressDialog.setMax(max);
pb_atool_sms.setMax(max);
}
});
//progressDialog.dismiss();
};
}.start();
二、项目开发 回调函数 情景一 在ViewPager中创建接口
1.创建一个接口,在接口中创建方法(RollViewPager是一个ViewPager页面)
package com.example.rollview;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
public class RollViewPager extends ViewPager{
public RollViewPager(Context context) {
super(context);
}
/**
* 滚动方法
*/
public void roll() {
onViewClickListener.OnViewClick(url); // 在业务逻辑的地方,通过接口实现对象调用相应的方法
}
// RollViewPager 中的业务操作省略...
// .
// .
// .
/**
* 图片点击的接口
*/
public interface OnViewClickListener{
/**
* 点击的方法
*/
public void OnViewClick(String url);
}
public OnViewClickListener onViewClickListener;
/**
* 提供接口的方法
*/
public void setOnViewClickListener(OnViewClickListener onViewClickListener){
this.onViewClickListener = onViewClickListener;
}
}
2.设置回调监听,创建一个接口,并实现接口中的方法
package com.example.rollview;
import com.example.rollview.RollViewPager.OnViewClickListener;
public class ItemPager {
private void processData() {
RollViewPager rollViewPager = new RollViewPager();
rollViewPager.setOnViewClickListener(new OnViewClickListener() {
@Override
public void OnViewClick(String url) {
// 点击的方法
}
});
}
}