前几天遇到一个问题。 android 主项目中执行 库中的方法,结果库中需要用到一些 只有主项目中才存在的东西。 没有办法,只能通过接口再回调到 主项目中。于是来了一个大循环。你们可能会说这样写不好。 我只能说,不是我设计的,不是我设计的,不是我设计的,而我还必须要完成这个进度。 大概思路是 3 中的代码实现。
看见别人说的很形象。转过来,理解一下基本概念:
理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机回头来调用我doSomething的方法。好比,我给你打电话问某个难题,你电话里想不出来,于是说等想到了再回我电话。(转)
1, 代码实现(无参数,无返回值):
public class Demo {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
// 我实现接口,等着你的电话。
HandlerInterface handlerInterface = new HandlerInterface() {
@Override
public void deal() {
// TODO Auto-generated method stub
System.out.println("回调");
}
};
Thread.sleep(3000); // 做一些事情。
handlerInterface.deal(); // 打电话告诉我,我想出问题了。
}
// 定义接口
public interface HandlerInterface{
void deal();
}
}
2, 代码实现( 有参,无返回值)
public class Demo {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
// 我实现接口,等着你的电话。
HandlerInterface handlerInterface = new HandlerInterface() {
@Override
public void deal(String an) {
// TODO Auto-generated method stub
System.out.println(an);
}
};
Thread.sleep(3000); // 做一些事情。
handlerInterface.deal("答案"); // 打电话告诉我,我想出问题了。
}
// 定义接口
public interface HandlerInterface{
void deal(String an);
}
}
具体的在项目中,通常在两个类之间使用,道理是一样的。下面的代码用两个类,模拟两个人。
3,两个类。People1 问 People2 问题。
public class People1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 我已经实现,监听着,等着people2告诉我
People2 people2 = new People2(new HandlerInterface() {
@Override
public void deal(String an) {
// TODO Auto-generated method stub
System.out.println("答案是:"+an);
}
});
}
}
public class People2 {
private HandlerInterface handlerInterface;
public People2(HandlerInterface handlerInterface) {
this.handlerInterface = handlerInterface;
handlerInterface.deal("答案"); //告诉 people1答案。在满足条件的时候调用。
}
// 定义接口
public interface HandlerInterface {
void deal(String an);
}
}
Over。