接口回调是我们经常使用的一种传值方式,就是通过定义接口,在执行类中将执行结果交给接口,然后在运行类中通过接口将得到的值取出来。
其实,接口可以看做多态,这样方便理解,即通过父类指向子类实例!
下面就详细说一下为什么这么说:
我们都知道,多态的父类指向子类实例,即一个父类A,有一个子类B继承了父类A,在调用的时候是通过A a=new B();就是通过父类的引用指向子类的实例,但是一样可以调用子类中的方法。
接口回调与这个类似,一样是通过父类指向子类,只是接口是父类,具体实现类是子类。
下面进行代码演示:
首先是创建一个Activity类,来作为展示。
public class A extends Activity{
public void onCreate(Bundle savedInstanceState){
}
}
然后创建执行类B
public class B{
}
创建接口,通过定义的参数来传递数据,可以是Bean类
public interface Myinter{
void fanhui(BaseBean baseBean);
}
然后,在B类中创建两个方法,一个是实例化接口,一个是处理需要执行的代码。
//执行
public void b(){
BaseBean bean=“等会传递到A类中”;
}
//接口实例化
Myinter myinter;
//在activity,A类中调用该方法传入的是this,即Activity
public void getMyinter(Myinter myinter){
this.myinter=myinter;
//这句话相当于:Myinter myinter=new A();
}
那么,myinter现在就相当于一个Activity。
然后,在B类中创建的方法中通过调用接口将值传入
public void b(){
BaseBean bean=“等会传递到A类中”;
myinter.fanhui(bean);
//因为Activity即A类需要实现接口,重写里面的方法,那么,这就相当于用A的对象,调用了A类中的接口实现
方法,传入了值,这个应该都知道。
}
既然在执行类中通过A类的对象调用了A类的接口实现方法,那么,A类中重写接口的方法,自然也就接收到了
这里传入的值,也就是接口回调。
下面是三个完整的类和注释:
public class A extends Activity implements Myinter{
public void onCreate(Bundle savedInstanceState){
B b=new B();
//调用B类中的方法,将Activity传递过去
b.getMyinter(this);
}
//接口重写的方法,将会接受到传递的数据。
public void fanhui(BaseBean basebean){
text.settext(basebean);
}
}
B类
public class B{
Myinter myinter;
public void b(){
BaseBean bean=“等会传递到A类中”;
//相当于activity调用A类中的接口实现的方法传入参数
myinter.fanhui(bean);
//在activity,A类中调用该方法传入的是this,即Activity
}
public void getMyinter(Myinter myinter){
this.myinter=myinter;
//这句话相当于:Myinter myinter=new A();
}
}
接口
这样,一个接口回调就完成了,只要换一种思路其实很好理解,就是A实现了接口里面的方法,然后把A传入B,在B里用A调用A里的接口实现的方法。public interface Myinter{ void fanhui(BaseBean baseBean); }