在android开发中很多地方都会用到回调方法,在这里尝试总结一下。
最常见的回调方式当然是view控件的监听事件的设置。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (button.getText().equals("open")){
scanLeDevice(true);
button.setText("cancel");
}else {
scanLeDevice(false);
button.setText("open");
}
}
});
这是一个非常典型的回调应用。简单来说实现回调需要两个类(A和B)和一个接口C。在A类中包含接口C的对象,并在A中的一个方法中调用接口C的方法,B类中新建一个A的对象,通过匿名内部类的形式把接口C的方法具体定义,然后只要调用A中的方法就可以实现接口中定义的方法了。
注意,在回调机制中A类并没有继承C接口,只是包含其对象,在理解回调机制的时候需要尤其关注。view的启动方法是用户点击屏幕实现的。
下面给一个完整的实例。
interface OnClickListener {
public void OnClick(Button b);
}
class Button {
OnClickListener listener;
public void click() {
listener.OnClick(this);
}
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
}
class Activity {
public Activity() {
}
public static void main(String[] args) {
Button button = new Button();
button.setOnClickListener(new OnClickListener(){
@Override
public void OnClick(Button b) {
System.out.println("clicked");
}
});
OnClickListener myListener = new OnClickListener(){
@Override
public void OnClick(Button bu){
System.out.println("yeah");
}
};
button.click();
Button b2 = new Button();
b2.setOnClickListener(myListener);
b2.click();
}
}