想要彻底理解安卓中用的回调,最好的办法是自己写一个类似的实现安卓中回调功能的实现方法。
我自己写了一个可以实现setOnClickListener回调的工程:
具体目录:
工程源码的具体地址:http://pan.baidu.com/s/1c0hWPkk ,
View.java:模拟的是Android中的View控件,
1 package com.wyl.component; 2 3 import com.wyl.IntP.OnClickListener; 4 5 public class View { 6 public OnClickListener listener; 7 public String type; 8 9 /** 10 * 两个参数的构造器 11 * @param listener 12 * @param type 13 */ 14 public View(OnClickListener listener, String type) { 15 super(); 16 // this.listener = listener; 17 this.type = type; 18 } 19 20 public View(String type) { 21 super(); 22 this.type = type; 23 } 24 25 /** 26 * 一个参数的构造器 27 * 28 * @param listener 29 * 传入的对象为一个接口, 30 */ 31 public View(OnClickListener listener) { 32 super(); 33 this.listener = listener; 34 } 35 36 public OnClickListener getListener() { 37 return listener; 38 } 39 /** 40 * 这个方法尤其重要, 41 * @param listener 42 */ 43 public void setListener(OnClickListener listener) { 44 this.listener = listener; 45 } 46 47 public String getType() { 48 return type; 49 } 50 51 public void setType(String type) { 52 this.type = type; 53 } 54 55 /** 56 * Click()方法模拟button的点击事件,一点击就会触发接口的OnClick()方法 57 */ 58 public void Click() { 59 if (listener != null) { 60 /* 61 * 只有View对象(控件对象,比如button等)的成员变量listener不为空的时候 62 * 回调listener接口对象的OnClick方法,这个方法的入参恰恰是View类型的变量 63 */ 64 listener.Onclick(this); 65 } else { 66 //如果View对象(控件对象,比如button等)的成员变量listener为空,那么捕获,否则会报错 67 System.out.println("要先注册listener...."); 68 return; 69 } 70 } 71 }
OnClickListener.java,是一个接口,
1 package com.wyl.IntP; 2 3 import com.wyl.component.View; 4 /** 5 * 模拟Android中的OnClickListener接口, 6 * 这个接口中只有一个OnClick()方法, 7 * @author Administrator 8 * 9 */ 10 public interface OnClickListener { 11 public void Onclick(View view); 12 }
测试类:
1 package com.wyl.test; 2 3 import com.wyl.IntP.OnClickListener; 4 import com.wyl.component.View; 5 6 public class TestClick { 7 public static void main(String[] args) { 8 View v1 = new View("ListView"); 9 v1.setListener(new OnClickListener() { 10 11 @Override 12 public void Onclick(View view) { 13 // TODO Auto-generated method stub 14 System.out.println("v1控件的类型是:" + view.getType()); 15 } 16 }); 17 v1.Click();//Click()相当于Android中点击一个button的时候触发的事件,模拟点击事件 18 } 19 }
运行结果:
v1控件的类型是:ListView
时间: 2024-10-23 22:12:03