标签:自己 告诉 strong images png list textview nbsp 点击
首先说一下最抽象的形式——2个类,A类和B类。A类含有1个接口、1个接口变量、(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的“地方”;B类实现A中的接口,(可能)含有1个A类实例的引用,并且(可能用A类中为接口变量赋值的方法)将“自己”传递给A类的接口变量。
再将一个小故事:
首先是A类
public class A{ ... //1个接口变量 private Callback mCallback; ... //1个接口 public interface Callback{ void doSomething(); } ... //1个给接口变量赋值的方法 public void setCallback(Callback callback){ mCallback = callback; } ... //1个使用接口变量的地方 public void onExecute(){ ... mCallback.doSomething(); ... } ... }
然后是B类
public class B implements A.Callback{ ... //A类的实例的引用 private A mAInstance; ... //B类实现了A类的接口 public void doSomething(){ Log.d("TAG","will do something"); } ... //B类将自己(实际上是接口的实现)传给A类实例的接口变量 mAInstance.setCallback(this); }
下的几个点:
用生活中的事情打比方,其实很像是某人甲买杀手去杀死仇人= =,甲只是告诉杀手杀人这个目的,具体怎么杀死甲的仇人,由杀手去决定。这里甲是A类,杀手是B类,甲在某时刻告诉杀手杀人是A类调用回调接口里面的回调函数,杀手杀人的方法是B类实现A类的回调接口…
C不会自己调用b,C提供b的目的就是让S来调用它,而且C不得不提供。S并不知道C提供的b是什么,因此S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数(即注册)。r为注册函数。
简单来说:
回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机
详细的描述:
Button button = (Button)this.findViewById(R.id.button); button.setOnClickListener(newButton.OnClickListener() { //回调函数 @override publicvoidonClick(View v) { buttonTextView.setText("按钮被点击了"); } });
上面的代码给按钮加了一个事件监听器,这其实就是“回调”最常见的应用场景之一。我们自己不会显式地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。
标签:自己 告诉 strong images png list textview nbsp 点击
原文地址:http://www.cnblogs.com/DonAndy/p/6143147.html