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),请尊重他人的辛勤劳动成果,谢谢 以 前不理解什么叫回 ...
随机推荐
- Mybatis入门 digest
http://www.mybatis.org/mybatis-3/zh/configuration.html userDao-mapping.xml相当于是UserDao的实现, 同时也将User实体 ...
- OpenStack安装部署管理中常见问题解决方法
一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...
- linux 下手动编译安装无线网卡驱动
先参照 <本地yum源安装GCC >安装好gcc hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题.在这里做 ...
- 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 ...
- ASP.NET快速开发框架、这才是高大上档次后台管理UI界面
另外献上在<线体验Demo地址>希望大家也能从中得到一些启发.地址:http://121.40.148.178:8080/ . 用户名:guest,密码:123456QQ技术交流群:239 ...
- virtualbox中新版本Ubuntu安装软件增强包后重启无限登录界面的解决办法
原来我虚拟机版本是4.2.10,装的Ubuntu3.3,因为版本过老使用出现了一些问题,于是换成14.04,安装成功,但是装增强包的时候,装完重启,无限登录界面,密码是对的. 看了网上的很多方法,什么 ...
- php基础知识(每天分享一些以前的笔记希望能帮助自学的朋友)
php基础(第一天) php标签 1. 要知道php是一种嵌入html文档的脚本语言:php语法格式是:<?php 想要写的内容 ?>红色体就是php的标签,注意这些标签都要在英式输入法 ...
- IntelliJ IDEA中创建并运行scala应用程序
1.安装scala插件 2.创建scala项目 下载scala SDK,如果你已经下载了,选择你所下载的版本,点击OK
- [LeetCode]题解(python):117-Populating Next Right Pointers in Each Node II
题目来源: https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意分析: 根据上一题,如果给定 ...
- eclipse设置web项目发布到tomcat根目录下
如果已经将项目绑定到服务器了,那就先删除服务器. 重新添加项目进服务器,双击 修改下面Server Locations到tomcat目录下 顺带可以修改下右上角的超时设置 再点击下方 这样就可以了.