Android的简单应用(三)——为你的程序添加监听器

平时在写程序时经常会遇到监听器,比如按钮的click监听器,按键监听器等等。而android中的监听器和java中的回调函数是同一个概念,都是在底层代码中定义一个接口来调用高层的代码。那么什么是回调函数呢?网上说的是“在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。”按照我的理解就是在程序A中先挖了一个坑,然后等着你在程序B中去填里面的内容。不填?那就是被坑咯~

一、定义回调函数

  1. 建立一个类,其中包括一个接口的变量

    private CallBack callBack;//接口的变量
  2. 建立一个接口的声明

    public interface CallBack{
       public void Out();//接口里面要实现的方法
    }
  3. 在类中与接口绑定(或者说获得接口的引用)

    public void setCallBack(CallBack callBack){
            this.callBack = callBack;
        }
    
        public void Out(){
            callBack.Out();
            System.out.println("这是CallerClass的输出");
        }
  4. 整个类

    public class CallerClass {
    
        private CallBack callBack;//接口的声明
    
        public CallerClass(){};
    
        public void setCallBack(CallBack callBack){
            this.callBack = callBack;
        }
    
        public void Out(){
            callBack.Out();
            System.out.println("这是CallerClass的输出");
        }
    
        public interface CallBack{
            public void Out();//接口里面要实现的方法
        }
    
    }

二、调用回调函数

我这里是在Activity中绑定接口,实际代码如下:

public class MainActivity extends Activity implements CallerClass.CallBack{  private CallerClass caller; ...}

继承了CallerClass中的CallBack接口,Out方法如下:

    @Override
    public void Out() {
        // TODO Auto-generated method stub
        System.out.println("这是Activity上的输出");
    }

最后在onCreate中调用CallerClass的Out()方法:

caller = new CallerClass();
caller.setCallBack(this);
caller.Out();

完整代码:

public class MainActivity extends Activity implements CallerClass.CallBack{

    private CallerClass caller;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        caller = new CallerClass();
        caller.setCallBack(this);
        caller.Out();

    }

    @Override
    public void Out() {
        // TODO Auto-generated method stub
        System.out.println("这是Activity上的输出");
    }

}

三、结果

Perfect~

interface的作用感觉和C++中的指针差不多,它是一个地址的引用,但没有生成内存。所以我们能够预先为程序赋予要执行的方法。不止如此,interface在设计模式的作用更是强大,工厂模式,建造者模式,观察者模式无不用到interface。

时间: 2024-10-24 18:04:04

Android的简单应用(三)——为你的程序添加监听器的相关文章

[android](学习笔记6)为应用程序添加对话框(1)

本文主要介绍如何为应用程序添加基于AlertDialog的对话框,使用DialogFragment呈现该对话框. 可以为对话框创建一个标题的string资源,在values/strings.xml中添加字符串str. 创建一个DialogFragment,选择android.support.v4.app.DialogFragment作为基类,并复写onCreateDialog方法.在屏幕上显示DialogFragment的时候,其托管activity的FragmentManager会调用该复写方

[android](学习笔记7)为应用程序添加选项菜单

1 在xml文件中定义选项菜单: 创建res/menu目录,并添加xml文件:选择New-Android XML File.选择Menu文件资源类型: 打开新建的xml文件,切换到xml编辑视图,添加新的item元素: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" &g

Android 最简单的SD卡文件遍历程序

package com.wenhao.test.sddemo; import java.io.File; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import androi

[android](学习笔记6)为应用程序添加对话框(2)

如何为对话添加视图? 上一篇文章中只能显示一个空的对话框,除了标题和一个确定按钮,别的什么都没有,这样的对话框没有任何意义.所以本文需要解答如何为对话框添加内容的问题. 我们的对话框是通过AlertDialog.Builder创建的,在创建之前,可以跟我们几个机会去配置对话框.为了给对话框添加视图,可以通过调用AlertDialog.Builder的setView方法实现.不过,首先,你得有一个视图对象,可以通过xml布局文件的形式生成一个视图对象,直接看代码(包括下面的布局文件): publi

Android之RecyclerView简单使用(三)

使用过ListView滴小伙伴都知道.ListView有这样一个属性android:divider,用来设置每一个item之间切割线滴属性.问题来了,那么RecyclerView这个控件有没有这个属性呢,尝试了一下,没有这个属性.可是RecyclerView有这种方法mLinearRecycler.addItemDecoration(),用来加入切割线滴.以下是这部分源代码: public static abstract class ItemDecoration { public void on

Android Studio 简单介绍和使用问题小结

原文  http://www.cnphp6.com/archives/59264 主题 Gradle Android Studio Android 随着android 5.0 的发布,android 开发已经进入了一个全新的时代,eclipse开发安卓已经有点不合时宜了,在github上80%的android项目都采用android studio开发,而且android studio的中文教程越来越多,还有什么理由不固守这eclipse 呢. 下面这篇文章对了解android studio 很有

android快速上手(三)常用控件使用

完成了android的第一个程序HelloWorld,下面就开始控件的学习,下面是一些常见的控件. (一)TextView 简单的文本描述 (二)EditText 编辑框,输入文字信息 (三)Button 按钮,点击后会触发点击事件,可以对事件进行处理 (四)ImageView 图片控件,可以加载图片显示 (五)ListView 列表,需要跟适配器Adapter结合,适配器提供数据 (六)Toast 闪现提示语,常用于普通的提示文本,只显示一小段时间自动消失 (七)ScrollView 一般用于

Android中常用的三种存储方法浅析

Android中常用的三种存储方法浅析 Android中数据存储有5种方式: [1]使用SharedPreferences存储数据 [2]文件存储数据 [3]SQLite数据库存储数据 [4]使用ContentProvider存储数据 [5]网络存储数据 在这里我只总结了三种我用到过的或即将可能用到的三种存储方法. 一.使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置信息比如窗口状态,它的本质是基

Android NDK 简单介绍、工具安装、环境配置

NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. * NDK提供了一系列的工具,帮助开发人员高速开发C(或C++)的动态库,并能自己主动将so和java应用一起打包成apk.这些工具对开发人员的帮助是巨大的. * NDK集成了交叉编译器,并提供了对应的mk文件隔离平台.CPU.API等差异,开发者仅仅须要简单改动mk文件(指出"哪些文件须要编译"."编译特性要求"等),就能够创建出so. * NDK能够自己主动地将so和Ja