想要彻底理解安卓中用的回调,最好的办法是自己写一个类似的实现安卓中回调功能的实现方法。

我自己写了一个可以实现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的回调模拟的更多相关文章

  1. Android异步回调中的UI同步性问题

    Android程序编码过程中,回调无处不在.从最常见的Activity生命周期回调开始,到BroadcastReceiver.Service以及Sqlite等.Activity.BroadcastRe ...

  2. Android中回调接口的使用

    MainActivity如下: package cn.testcallback; import android.os.Bundle; import android.app.Activity; /** ...

  3. 弄明白Android 接口回调机制

    以前对于这个机制理解不够深刻,现在重新整理下思路. 一.建模 我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机 ...

  4. Android笔记二十四.Android基于回调的事件处理机制

        假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...

  5. Android 命令行模拟按键

    /***************************************************************************** * Android 命令行模拟按键 * 说 ...

  6. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  7. android之回调函数的意义

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273) 看完这篇文后大家可以看看这个http://blog. ...

  8. Android的回调

    学了两三周的安卓了,最先开始是看mars老师的视频,看了一两天结合慕课网上的一些安卓视频,到现在算是有点入门了. 安卓立用得比较多的回调函数有点不明是怎么实现的,网上找了一些资料,结合自己的实践,总算 ...

  9. JAVA和Android的回调机制

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢 以 前不理解什么叫回 ...

随机推荐

  1. cmd dos 下 无法显示中文

    在做程序开发的时候经常需要在使用命令行进行操作, dos环境本身是不支持中文的,有时候中文编码的问题就像苍蝇一样讨厌,下面提供几种常用的手段解决win7环境下中文显示乱码的问题: 方法一: 修改注册表 ...

  2. ListView 行高设置不起作用

    通常我们在自定义listview的时候会遇到这个问题,我们设置了每行的layout的高度,但是没起作用,那是因为在adapter里面getview的时候出的问题,通常我们写: view = mInfl ...

  3. 将内部部署网络和 Windows Azure 集成的新选项: 使用AT&T

    关于云计算的主要对话围绕着向云迁移展开.今天,我们宣布与 AT&T 结为战略联盟,共同为客户提供云计算服务.这一合作伙伴关系将授权客户访问 Windows Azure,作为其现有数据中心的逻辑 ...

  4. Android使用XML全攻略(1)

    Android使用XML全攻略(1)    Android 是针对移动设备的一种新兴的开源操作系统和 SDK.借助它,您可以创建功能强大的移动应用程序.当您的应用程序可以访问 Web 服务时,其吸引力 ...

  5. HTML语法

    2014-01-21/21:28:59 网页制作概述 HTML是WEB页面的描述性语言 CSS为HTML样式机制 JavaScript为交互WEB设计最佳选择 CSS\JavaScript\PHP都可 ...

  6. 有关UIWebView的SSL总结

    在网上找了非常多文章差点儿相同都是一样的,基本上都是关于NSURLConnection的文章. 如今把几个比較好的连接分享给大家http://blog.csdn.net/pingchangtan367 ...

  7. centos7 环境搭建

    centos7 环境搭建    CentOS-7-x86_64-DVD-1511.iso    vmware121. 安装    使用iso安装系统:2. 修改yum源到光盘        先把光盘C ...

  8. HDOJ 1308.Is It A Tree?

    2015-07-15 问题简述: 给出一组节点关系,判断由这些节点组成的图是否为一颗树. 树只有一个根节点,每个节点只有一条边指向它,没有环. 原题链接:http://poj.org/problem? ...

  9. BZOJ 2724: [Violet 6]蒲公英( 分块 )

    虽然AC了但是时间惨不忍睹...不科学....怎么会那么慢呢... 无修改的区间众数..分块, 预处理出Mode[i][j]表示第i块到第j块的众数, sum[i][j]表示前i块j出现次数(前缀和, ...

  10. 经典阅读-《Effective C++》Item1:视C++为一个联邦语言

    C++已经是个多重范型编程语言(multiparadigm programming language),一个同时支持过程形式(procedural).面向对象形式(object-oriented).泛 ...