• Android的回调模拟


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

    我自己写了一个可以实现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开发学习总结(一)——搭建最新版本的Android开发环境
    数据库服务器编码,数据库编码,数据库表编码,数据库表字段编码
    webservice(二)简单实例
    webservice(一) 概念
    JAVA的StringBuffer类
    Log4J日志配置详解
    如何配置使用 Log4j
    使用MyBatis Generator自动创建代码
    Spring MVC POST中文乱码解决方案
    JSP开发中对jstl的引用方式(标签库引用)
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4943324.html
Copyright © 2020-2023  润新知