您的位置:首页 > 移动开发 > Android开发

Android的回调模拟

2015-11-06 18:09 417 查看
  想要彻底理解安卓中用的回调,最好的办法是自己写一个类似的实现安卓中回调功能的实现方法。

我自己写了一个可以实现setOnClickListener回调的工程:

具体目录:


工程源码的具体地址:http://pan.baidu.com/s/1c0hWPkk

View.java:模拟的是Android中的View控件,

package com.wyl.ximahui;

public class View {
public OnClickListener listener;
public String type;

/**
* 两个参数的构造器
*
* @param listener
* @param type
*/
public View(OnClickListener listener, String type) {
super();
// this.listener = listener;
this.type = type;
}

public View(String type) {
super();
this.type = type;
}

/**
* 一个参数的构造器
*
* @param listener
*            传入的对象为一个接口,
*/
public View(OnClickListener listener) {
super();
this.listener = listener;
}

public OnClickListener getListener() {
return listener;
}

/**
* 这个方法尤其重要,这个set方法的重要性在于给View对象的成员变量传入接口实例对象,
* 如果不传入的话那么在点击View控件的时候就无法调用接口对象的OnClick()方法,
* @param listener
*/
public void setListener(OnClickListener listener) {
// 左侧:View对象的成员变量,右侧:一个OnClickListener接口类型的变量,在真正的方法调用中,就是一个OnClickListener接口类型的对象
this.listener = listener;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

/**
* Click()方法模拟button的点击事件,一点击就会触发接口的OnClick()方法
*/
public void Click() {
if (listener != null) {
/*
* 只有View对象(控件对象,比如button等)的成员变量listener不为空的时候
* 回调listener接口对象的OnClick方法,这个方法的入参恰恰是View类型的变量
*/
listener.Onclick(this);
} else {
// 如果View对象(控件对象,比如button等)的成员变量listener为空(即不给View传入接口对象),那么捕获,否则会报错
System.out.println("要先注册listener....");
return;
}
}
}


OnClickListener.java,是一个接口,

package com.wyl.IntP;

import com.wyl.component.View;
/**
* 模拟Android中的OnClickListener接口,
* 这个接口中只有一个OnClick()方法,
* @author Administrator
*
*/
public interface OnClickListener {
public void Onclick(View view);
}


测试类:

package com.wyl.test;

import com.wyl.IntP.OnClickListener;
import com.wyl.component.View;

public class TestClick {
public static void main(String[] args) {
View v1 = new View("ListView");
v1.setListener(new OnClickListener() {

@Override
public void Onclick(View view) {
// TODO Auto-generated method stub
System.out.println("v1控件的类型是:" + view.getType());
}
});
v1.Click();//Click()相当于Android中点击一个button的时候触发的事件,模拟点击事件
}
}


运行结果:

v1控件的类型是:ListView
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: