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),请尊重他人的辛勤劳动成果,谢谢 以 前不理解什么叫回 ...
随机推荐
- JAVA排序(一) Comparable接口
昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢 ...
- elk 数据存储
让我们在集群中唯一一个空节点上创建一个叫做blogs的索引,默认情况下,一个索引被分配5个主分片, 但是为了演示的目的, 我们只分配3个主分片和一个复制分片(每个主分片都有一个复制分片): PUT / ...
- [2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程
[2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程 google的android自带的apps写的是相当牛逼的,将其导入到ecli ...
- java的常见异常与错误总结
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...
- uva 11137 Ingenuous Cubrency(完全背包)
题目连接:11137 - Ingenuous Cubrency 题目大意:由21种规模的立方体(r 1~21),现在给出一个体积, 要求计算可以用多少种方式组成. 解题思路:完全背包, 和uva674 ...
- Android 类似未读短信图标显示数字效果的分析
之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下, 原理 一个应用要实 ...
- Android实现 ScrollView + ListView无滚动条滚动
Android实现 ScrollView+ListView无滚动条滚动,即ListView的数据会全部显示完,但Listview无滚动条. 核心代码如下: 1. NoScrollListView.ja ...
- hdu 4873 ZCC Loves Intersection(大数+概率)
pid=4873" target="_blank" style="">题目链接:hdu 4873 ZCC Loves Intersection ...
- C++面向对象类的书写相关细节梳理
类的问题 继承类的原因:为了添加或者替换功能. 1. 继承时重写类的方法 v 替换功能 ① 将所有方法都设置为virtual(虚函数),以防万一. Virtual:经验表明最好将所有方法都设置为vir ...
- AeroSpike 记录
1.基本概念: namespace:类似关系型数据库中的schema,这个需要在配置文件中配置,可以指定存储引擎.存储大小.备份数.存活时间等 set:类似关系型数据库中的表 record:类似关系型 ...