接口回调之简要理解

摘要:
Android中使用了很多接口回调机制。今天,我有幸了解了界面回调是如何使用的:Android中使用了许多界面回调。让我们把它们记录下来。让我们先看看最基本的用法:Buttonbat=findViewById;bt.setOnclickListener;按钮的单击事件setOnClickListener传入接口对象,公开其实现,并定义单击后要执行的操作。返回true表示已调用布局的OnClickListener,而返回false表示直接返回。这个界面非常灵活,需要慢慢磨练。

【背景】在Android中非常多得使用到了接口回调的机制,今天就有幸了解一下,接口回调是怎么回事(简单理解)

接口回调的使用:

接口回调在android中的使用还是蛮多的,记录一下吧,也算是皮毛吧。毕竟,用起来还是很灵活的。

  1. 先来看看最基础的使用:

  Button bt = findViewById(R.id.bt);
  bt.setOnclickListener(new View.OnclickListener(){
      //TO DO SOMETHING
  });

按钮的点击事件setOnClickListener传入的就是接口对象,将其实现暴露出来,定义点击后要进行的事情。

  1. 点进去看一下,它事怎么实现的。

  public void setOnClickListener(@Nullable OnClickListener l) {
      if (!isClickable()) {
          setClickable(true);
      }
      getListenerInfo().mOnClickListener = l;
  }
​
  public interface OnClickListener {
      /**
        * Called when a view has been clicked.
        *
        * @param v The view that was clicked.
        */
        void onClick(View v);
  }

发现setOnClickListener方法的参数就是一个接口对象,然后将该接口对象保存在ListenerInfo.mOnClickListener中。

  1. 然后,怎么是使用呢,就看View了。

/**
   * Directly call any attached OnClickListener.  Unlike {@link #performClick()},
   * this only calls the listener, and does not do any associated clicking actions like reporting an accessibility event.
   *
   * @return True 
     there was an assigned OnClickListener that was called, 
     false 
     otherwise is returned.
  */
  public boolean callOnClick() {
     ListenerInfo li = mListenerInfo;
     if (li != null && li.mOnClickListener != null) {
          li.mOnClickListener.onClick(this);
          return true;
      }
      return false;
  }

查看注释可以得知,此方法可调用认可附加的OnClickListener,并且它只调用listener,不执行任何关联的单击操作,如报告可访问性。返回true表示布置的OnClickListener被调用了,false则直接返回。

最后可以看到,接口就是将一些方法暴露出来,让使用者定义相关的动作,同事保持了接口持有者的隐蔽性。

大概基本的就是这样了,还有很多需要请指教。这个接口用起来还是非常灵活的,需要慢慢磨练。

 ------------------------------------------------------------- 以上更新 -------------------------------------------------------

1.为什么有回调机制

有的事情,不知道什么时候会发生,什么时候能够完成。于是,就会有一个监听关注事件的变化,这也就是接口回调

2.简单的举例子

举个例子
模拟下载,实施监督下载的进度,当100%时,提醒下载完成

1.  建立一个下载进度的类
    需要监督加载的进度,因此方法内需要一个监督进度的形参接口
class Progress {

    public void loadProgress(IProgressListener progressListener) {
        //模拟进度
        for (int i = 1; i <= 100; i++) {
            //进度每改变一次,即调用更新一次监督的数据
            progressListener.curProgress(i);
        }
    }
}


2.  建立监听的回调接口,用来监听进度
interface IProgressListener {
    void curProgress(int curProgress);
}


3.运行调用
  实际还是对多态的运用
  当Progress类调用loadProgress(IProgressListener progressListener)时
  传入的实参是一个匿名内部类,也是IProgressListener的子类
  相当于 IProgressListener progressListener = new 子类();
  此时调用的是子类的实现。

public class Main {

    public static void main(String[] args) {
        Progress progress = new Progress();

        progress.loadProgress(new IProgressListener() {
            @Override
            public void curProgress(int curProgress) {
                System.out.printf("curProgress:" + curProgress + "
");
                if (curProgress == 100)
                    System.out.printf("下载完成");
            }
        });
    }
}

接口回调之简要理解第1张

 【注:】参考博客:https://www.jianshu.com/p/69deff6960b8

免责声明:文章转载自《接口回调之简要理解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DotNet Core 介绍NetworkX系列教程(10)-算法之一:最短路径问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Http自动跳转Https的接口测试实践

日前,需要做一个接口测试,对象是一个web系统,登录的时候需要用SSL连接,登录进入系统后自动转成普通的Http连接。 这种类型的web网站很常见,既保证了登录时的安全,也避免了整个系统使用SSL带来的系统性能下降的问题。 首先,我们把整个访问过程分解成3个过程: 访问http接口:http://***.com/?; 跳转到Https,登录用ssl连...

使用SWIG将C++接口转换成Java接口

PS:此文章仅作为个人记录使用,代码属于私密,故无法公开; 以C++类classifier为例,文件保存于百度网盘 https://pan.baidu.com/s/1c2AwhaS(需密码) 系统:Ubuntu 15.04 参考资料: ubuntu源码安装swig 利用swig转换C++接口到Java接口 SWIG3.0说明文档 编程中出现的错误: ja...

说出一些常用的类,包,接口,请各举5个 ?

常用的包有: java.lang包下包括Math、System、StringBuilder、StringBuffer、Runtime、Thread、Runnable等。 java.util包下包括List、Set、Map,以及这些接口的常用实现类:ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。...

实现 API 调用接口

实现 API 调用接口 API 简介 API 的概念 API(Application Programming Interface) 应用程序编程接口是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一次例程的能力,而又无需访问源码或理解内部工作机制的细节。 API 的特点 一个明确定义的接口,可以为其他软件提供特定服务。 可以小到...

面向接口编程的基本原则

1. 单一职责原则SRP ( Single Responsibility Principle ) 对于单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责 定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相...

Jmeter入门(5)- jmeter取样器的HTTP请求

一、HTTP管理器 位置:线程组右键 ==> 添加 ==> 配置元件 HTTP信息头管理器 添加测试计划 添加线程组 添加HTTP请求 添加请求头(HTTP信息头管理器) 设置请求参数的数据类型Content-Type 常用的数据类型,如下: 值 含义 application/x-www-form-urlencoded 默认值...