这里我会用最简单的例子来介绍Android中的回调。
例子:我会定义一个输入框,如果输入的数字大于10,我会输出“大于10”,否则输出“小于或者等于10”。看具体的代码怎么用回调来实现这个功能。
1.定义一个普通接口A,里面 定义两个方法。
interface A{
void success();
void fail();
}
2.我再定义一个B类,里面写一个方法,来判断输入的数字是否大于10.这里传入两个参数,这个num就是你要输入的数字,如果大于10,我们就调用A接口的success()方法,否则调用fail()方法,因为要调用success()和fail()方法,所以我才在参数中引入A接口。
class B{
public isThanTen(int num,A a){
if(num>10)
{a.success();}
else
{a.fail()}
}
}
3.在Activity中调用B类中的isThanTen()方法.我这里提出部分代码,这里num你可以输入从EditTextView里面获取的数值。 另一个参数因为是A接口类型,所以我们new出来,既然是new的所以我们就必须要实现A接口的success()和fail()方法。在下面两个方法打印两个输出语句。
B b=new B();
b.isThanTen(num, new A() {
@Override
public void success() {
System.out.println("大于10");
}
@Override
public void fail() {
System.out.println("小于10");
}
});
4:我们运行Activity,如果输入11,则会打印”大于10“,输入9会打印”小于10“。为什么会是这样呢?当我们调用isThanTen()这个方法的时候,就会去B类判断是否大于10,如果大于10,则执行success()方法,而success()方法又在Activity中实现,所以就会执行你写的”System.out.println("大于10");小于10也是同理。
结论:我们这里写的接口A中的success()方法和fail()方法就是回调方法,也称回调函数。
回想一下刚才的过程,是Activity去调用B中的方法,然后B又去调用A接口中的方法,但是A接口的方法是在Activity中实现,所以B实际上是调用的Activity中的方法。总结一句话就是Activity去调用B方法就是为了来调用自己的方法。
有人如果想问,我这么调用自己的方法的目的何在?直接调用不行吗?我回答一下,这也是我当年的疑惑。使用这种方法是因为我们我不知道何时要去调用自己的success()和fail()方法,而且这个逻辑判断只能在其他类中去完成。所以这里你输入的数字是否大于10只能在B类中去判断,B判断完后给你结果。所以你才知道去调用success()和fail()中的哪个方法。