Android 中关于接口回调,监听的一看就懂版本_android 接口回调_南巷故人DL的博客-程序员秘密

技术标签: Android基本知识  java  android  

Android(Java)中的看一遍就懂的回调,接口监听

一、回调必有的四要素:
1.回调的接口,该接口一般在使用的类里面创建或者单独创建

 //创建的回调接口,以及接口中要做的事
 public interface Callback{
    
        void doSomething();
    }

2.在使用的类中接口的定义变量(接口不可以实例化)

 //    一个接口变量
    private Callback mCallback;

3.一个给接口变量赋值的方法

//一个给接口变量赋值的方法
    public void setmCallback(Callback callback){
    
        mCallback=callback;
    }

4.该类中定义的接口变量的使用的场景

//一个使用接口变量的地方
    public void use(){
    
        mCallback.doSomething();
    }

整体的代码如下,一般将将接口写在使用的类中

public class  TestA {
    
     //    一个接口变量
    private Callback mCallback;
    //     一个回调
    public interface Callback{
    
        void doSomething();
    }
    //一个给接口变量赋值的方法
    public void setmCallback(Callback callback){
    
        mCallback=callback;
    }
    //一个使用接口变量的地方
    public void use(){
    
        mCallback.doSomething();
    }
}

二、具体实现回调的接口的类:
在具体回调实现的类中,一般是实例化使用类的对象,在具体实现的类中采取接口的变量赋值,以及接口的具体实现方法,正式这样综合实现了接口和具体的实现分离,从而达到回调效果,具体也是三大要素

  1. 使用接口类实例的引用
  2. 引用的对象实现对接口的变量的传递
  3. 引用的对象对接口的使用

1.常用的实现的方法是采用匿名的方式实现接口的具体方法

 public class TestB extends Activity {
    
 	 //TestA类的实例的引用
 	private TestA mTestA
 	 @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);	
        mTestA=new TestA();
         mTestA.setmCallback(new mTestA.Callback() {
    
            @Override
            public void doSomething() {
    
            	//具体实现接口的方法
                Log.d(TAG, "doSomething: "+"我是接口的具体实现");
            }
        });
        //实例实现TestA类中使用接口的方法
        mTestA.user();
        }
 }

2.通过实现接口,以及传递自己本身来实现回调

public class B extends Activity implements TestA.Callback {
    
   


    //A类的实例的引用
    private TestA mTestA;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
	    mTestA=new TestA ();
	    //B类将自己(实际上是接口的实现)传给A类实例的接口变量
	    mTestA.setmCallback(this);
	    //实例实现A的方法,或者在A中实现该方法
	    mTestA.user();
	    }
    //B类实现了A类的接口
    @Override
    public void doSomething() {
    
        Log.d(TAG, "doSomething: "+"我是接口的具体实现");
    }
}

回调的简单例子:
1.接收数据

public class MainActivity extends AppCompatActivity implements MyCallBack {
    

    private ActivityMainBinding activityMainBinding;
    public static final String TAG="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        getData getData=new getData();
        getData.SetCallBack(this);
    }


    @Override
    public void getInfo(String info) {
    
        Log.e(TAG, "getInfo: "+info );
        activityMainBinding.showinfo.setText(info);
    }
}

2.创建接口

public interface MyCallBack {
    
    void getInfo(String info);
}

3.获取数据

public class getData {
    
    public String MyName="我是功夫熊猫";
    private MyCallBack myCallBack;

    public void SetCallBack(MyCallBack myCallBack){
    
        this.myCallBack =myCallBack;
        showInfo(MyName);
    }

    public void showInfo(String info){
    
        this.myCallBack.getInfo(info);
    }


}

4.结果展示
在这里插入图片描述

总结如下:

  • A类中有一个接口变量和接口。
  • B类实现A类的接口(这个接口就是所谓的回调接口)。
  • A类的接口变量会(通过过某种方法)获得靠B类实现的接口。
  • A类在一个适当的时机“使用”这个接口变量,即调用接口中的函数(这个函数就是所谓的回调函数)。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27308733/article/details/120991561

智能推荐

Python爬虫实战——今日头条图片下载_阿贾克斯Ajax在学习的博客-程序员秘密

目前正在自学爬虫,在b站上看到网课都比较过时,页面情况早已改变,对于新手比较不友好,经过尝试成功爬取今日头条图片并下载。首先是在今日头条下进行搜索:https://www.toutiao.com/search/?keyword=美女右键点击查看网页源代码后发现并不是我们需要的,经过分析,应该是该数据是通过异步加载Ajax实现的。右键点击检查,点击Network并切换到XHR,此时再刷新页面可以...

微信小程序--实现下载预览文件并分享_jfengz的博客-程序员秘密

转发:https://developers.weixin.qq.com/community/develop/doc/000e44edfbc438456baad9d895e400

docker学习篇(7)--docker的运行模式以及配置docker远程访问_do cker运行模式_gosenkle的博客-程序员秘密

概述docker的运行模式使用服务命令配置远程访问使用配置文件配置远程访问1、docker的运行模式docker以CS方式运行,我们通过客户端发送给守护进程(服务端)命令或者restful api,然后守护进行执行这些指令2、使用服务命令配置远程访问1)开机启动docker服务systemctl enable docker如下信息显示,其中/usr/lib/systemd/system/docke...

应用服务器学习笔记__丛丛的博客-程序员秘密

weblogic:使用weblogic服务器管理应用程序应按照以下步骤进行:1、建立一个域,weblogic是以域的形式管理应用的,每个使用weblogic服务器的用户都应建立一个属于自己的域,以便往这个域里面发布项目、配置数据源等,域是基础,一切后续行为以这个域作为前提。2、weblogic和was服务器类似,都允许在控制台配置JNDI数据源,任何应用都需要和数据库打交道,虽然我

前端请求后端,不使用form table方式,使用request payload形式_前端请求参数在payload_卓怡工作室的博客-程序员秘密

前端请求后端,不使用form table方式,使用request payload形式1.如果使用request payload形式在之前传值基础上对参数进行形式转换。转换为json字符串形式传输。data: JSON.stringify(data)2.request payload方式优点传递可以使用数组,遇到多个参数时候可以一起打包传递,相比单个参数传递更为安全。3.如何使用前台传递代码示例:var axios = require('axios') axios.po

随便推点

ad for gmail_broadury的博客-程序员秘密

刚才在用gmail的时候,无意中发现了界面右边的广告好像与邮件的题目有关.试了几次,果然如此.比如,题目是”祝XX生日快乐”,广告就是送花之类的.如果题目是linux内核之类的,那广告就变成了一些关于linux的技术文章.看来传说中的google 针对不同用户投放的不同广告还真的很不错.当然也有失效的时候,例如题目是星座的话,广告好像是一些无关的了.哈哈 ...

python Apriori算法1_python tid can_Jxufe渣渣斯的博客-程序员秘密

#参考Link:https://www.jianshu.com/p/2ee0a247a8cc#创建一个数据集合def loadDataSet(): #return [[1,3,4],[2,3,5],[1,2,3,5],[2,5]] return apriori_metadata# 创建一项集# 所有元素转换为不可变的字典,放到列表中def createC1(dataSe...

会话技术及用户认证-Cookie、Session与 Token_dlut_ppp的博客-程序员秘密

前言最早互联网只是用于简单的浏览文档信息、查看黄页及门户网站等等,并没有交互这个说法。但是随着互联网慢慢发展,宽带、服务器等硬件设施得到了很大的提示,互联网允许人们可以做更多的事情,所以交互式Web逐渐兴起,而HTTP无状态的特点却严重阻碍了其发展。HTTP 是无状态的协议,每个请求都是完全独立的(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)。也就是说,无法根据之前的状态进行本次的请求处理——服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次

(三)Servlet 知识点总结(来自那些年的笔记)_servlet 知识总结_今天离目标是不是更远了的博客-程序员秘密

(史上最全知识汇总)转载请贴上原文链接!作者:淮左白衣写于 2018年4月15日20:14:55如果,碰巧你打开了本篇博客,相信我,你想要的servlet知识,这里应该都能找到!!目录(史上最全知识汇总)转载请贴上原文链接!如果,碰巧你打开了本篇博客,相信我,你想要的servlet知识,这里应该都能找到!!Servlet开发IDEA如何配置tomca...

B. Unnatural Conditions_guozuofeng的博客-程序员秘密

题目链接:http://codeforces.com/contest/1028/problem/BB. Unnatural Conditionstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputLet s(x...

CocoaPods_Cliff哈哈的博客-程序员秘密

CocoaPods第三方框架管理工具概念:所谓第三方,就是除了官方和本人以外写的框架我们称为第三方。CocoaPads作为一个工具,就应该具有工具的一些职能,比如引入,更新,删除等。我们常用的第三方框架包括:Mansory,AFNetworking,SDWebImage等。CocoaPads能够更好的管理我们项目中的第三方库;安装步骤: 一:打开终端:$sudo gem update --syst

推荐文章

热门文章

相关标签