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

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

具体目录:

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

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

  1. package com.wyl.ximahui;
  2.  
  3. public class View {
  4. public OnClickListener listener;
  5. public String type;
  6.  
  7. /**
  8. * 两个参数的构造器
  9. *
  10. * @param listener
  11. * @param type
  12. */
  13. public View(OnClickListener listener, String type) {
  14. super();
  15. // this.listener = listener;
  16. this.type = type;
  17. }
  18.  
  19. public View(String type) {
  20. super();
  21. this.type = type;
  22. }
  23.  
  24. /**
  25. * 一个参数的构造器
  26. *
  27. * @param listener
  28. * 传入的对象为一个接口,
  29. */
  30. public View(OnClickListener listener) {
  31. super();
  32. this.listener = listener;
  33. }
  34.  
  35. public OnClickListener getListener() {
  36. return listener;
  37. }
  38.  
  39. /**
  40. * 这个方法尤其重要,这个set方法的重要性在于给View对象的成员变量传入接口实例对象,
  41. * 如果不传入的话那么在点击View控件的时候就无法调用接口对象的OnClick()方法,
  42. * @param listener
  43. */
  44. public void setListener(OnClickListener listener) {
  45. // 左侧:View对象的成员变量,右侧:一个OnClickListener接口类型的变量,在真正的方法调用中,就是一个OnClickListener接口类型的对象
  46. this.listener = listener;
  47. }
  48.  
  49. public String getType() {
  50. return type;
  51. }
  52.  
  53. public void setType(String type) {
  54. this.type = type;
  55. }
  56.  
  57. /**
  58. * Click()方法模拟button的点击事件,一点击就会触发接口的OnClick()方法
  59. */
  60. public void Click() {
  61. if (listener != null) {
  62. /*
  63. * 只有View对象(控件对象,比如button等)的成员变量listener不为空的时候
  64. * 回调listener接口对象的OnClick方法,这个方法的入参恰恰是View类型的变量
  65. */
  66. listener.Onclick(this);
  67. } else {
  68. // 如果View对象(控件对象,比如button等)的成员变量listener为空(即不给View传入接口对象),那么捕获,否则会报错
  69. System.out.println("要先注册listener....");
  70. return;
  71. }
  72. }
  73. }

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

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. Mybatis入门 digest

    http://www.mybatis.org/mybatis-3/zh/configuration.html userDao-mapping.xml相当于是UserDao的实现, 同时也将User实体 ...

  2. OpenStack安装部署管理中常见问题解决方法

    一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...

  3. linux 下手动编译安装无线网卡驱动

    先参照 <本地yum源安装GCC >安装好gcc hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题.在这里做 ...

  4. Nice way for strip_tags a like

    I found this code works great as the function strip_tags in php to replace html tags from string and ...

  5. ASP.NET快速开发框架、这才是高大上档次后台管理UI界面

    另外献上在<线体验Demo地址>希望大家也能从中得到一些启发.地址:http://121.40.148.178:8080/ . 用户名:guest,密码:123456QQ技术交流群:239 ...

  6. virtualbox中新版本Ubuntu安装软件增强包后重启无限登录界面的解决办法

    原来我虚拟机版本是4.2.10,装的Ubuntu3.3,因为版本过老使用出现了一些问题,于是换成14.04,安装成功,但是装增强包的时候,装完重启,无限登录界面,密码是对的. 看了网上的很多方法,什么 ...

  7. php基础知识(每天分享一些以前的笔记希望能帮助自学的朋友)

    php基础(第一天) php标签 1.  要知道php是一种嵌入html文档的脚本语言:php语法格式是:<?php 想要写的内容 ?>红色体就是php的标签,注意这些标签都要在英式输入法 ...

  8. IntelliJ IDEA中创建并运行scala应用程序

    1.安装scala插件 2.创建scala项目 下载scala SDK,如果你已经下载了,选择你所下载的版本,点击OK

  9. [LeetCode]题解(python):117-Populating Next Right Pointers in Each Node II

    题目来源: https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意分析: 根据上一题,如果给定 ...

  10. eclipse设置web项目发布到tomcat根目录下

    如果已经将项目绑定到服务器了,那就先删除服务器. 重新添加项目进服务器,双击 修改下面Server Locations到tomcat目录下 顺带可以修改下右上角的超时设置 再点击下方 这样就可以了.