Android的回调模拟
想要彻底理解安卓中用的回调,最好的办法是自己写一个类似的实现安卓中回调功能的实现方法。
我自己写了一个可以实现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
Android的回调模拟的更多相关文章
- Android异步回调中的UI同步性问题
Android程序编码过程中,回调无处不在.从最常见的Activity生命周期回调开始,到BroadcastReceiver.Service以及Sqlite等.Activity.BroadcastRe ...
- Android中回调接口的使用
MainActivity如下: package cn.testcallback; import android.os.Bundle; import android.app.Activity; /** ...
- 弄明白Android 接口回调机制
以前对于这个机制理解不够深刻,现在重新整理下思路. 一.建模 我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机 ...
- Android笔记二十四.Android基于回调的事件处理机制
假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...
- Android 命令行模拟按键
/***************************************************************************** * Android 命令行模拟按键 * 说 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- android之回调函数的意义
本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273) 看完这篇文后大家可以看看这个http://blog. ...
- Android的回调
学了两三周的安卓了,最先开始是看mars老师的视频,看了一两天结合慕课网上的一些安卓视频,到现在算是有点入门了. 安卓立用得比较多的回调函数有点不明是怎么实现的,网上找了一些资料,结合自己的实践,总算 ...
- JAVA和Android的回调机制
本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢 以 前不理解什么叫回 ...
随机推荐
- 自定义TWebBrowser浏览器控制遇到的一些问题
最近工作需要,要将TWebBrowser样式改头换面,包括菜单,滚动条等,都要换掉. 由于滚动条已经屏蔽掉,所以关于页面滚动等,全部都需要自己写代码来模拟了.模拟的过程中发现获得页面的客户区大小Cli ...
- tarjan算法大意
Tarjan算法 (以发现者Robert Tarjan命名)是一个在图中寻找强连通分量的算法.算法的基本思想为:任选一结点开始进行深度优先搜索dfs(若深度优先搜索结束后仍有未访问的结点,则再从中任选 ...
- Tomcat从零开始(十)Loader
第十课: 不知不觉就10篇blog了,说实话,我是第一次更这么长时间的Blog. 嗯,今天说说Loader,在以前的课程中,也就是内个能使用最初级的servlet的那一节,我们使用了URLClassL ...
- ANDROID对文件的操作介绍
1. Android遵循MVC设计思想: M(业务层):service V:视图(main.xml). C:Activity 2.使用文件如何对数据进行存储 Activity提供了openFileOu ...
- 万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》
ds max文件夹,插件文件夹以及3ds max的可执行程序文件夹: 位的,这里要改成x64,否则启动程序后3ds max会提示"不是有效的win32程序"之类的对话框. 然后要将 ...
- (译)Node.js的 EventEmitter 教程
原文标题:Node.js EventEmitter Tutorial 原文链接:http://www.hacksparrow.com/node-js-eventemitter-tutorial.htm ...
- Jquery dom搜索之siblings()方法
如果给定一个dom的元素集合的算则其对象,siblings()方法允许我们在dom树中搜索这个元素集合的同胞元素,并匹配这些元素构造一个新的对象,Jquery文档里面是这么说的,那么让我来用简单易懂的 ...
- 一般处理程序在VS2012中打开问题
问题:如果你用vs2012建立的一个一般处理程序,运行查看是,出现这样的界面 原因:VS2012默认使用IIS Web服务器,而不是Visual Studio开发服务器,基于安全考虑IIS默认不允许浏 ...
- BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队( RMQ )
RMQ.. ------------------------------------------------------------------------------- #include<cs ...
- Java学习之对象实例化
一个对象实例化过程:Person p = new Person();1,JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下). ...