android对接口回调的生动直观理解

本文深入浅出地解析了Android接口回调机制,通过生动的比喻和详细的步骤,讲解了如何在自定义控件中实现接口回调,以及其在拓展性和信息传递中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考了简单粗暴理解接口回调
Android接口回调机制(有图有真相,如果你一直接触接口回调,但是自己又一直理解不了,这篇文章会让你秒懂)
详解Android接口Interface的使用和意义
大家笔记本插内存条的的就是接口的一种,生产商做成接口而没有直接把内存条焊死在上面是有道理的,就是方便你拆装。所以接口很重要呀
来一个不太合适的生动比喻:
如果你是一个出租房房东,你想了解租客在你房子里干了什么不可描述的事情,你会怎么做?直接从窗户看就行了吗?No!从窗户看只能看到你不感兴趣的常事,关键的不可描述的事情怎么可以这么容易让你看到!
当然如下步骤:
1.买一个监视器(比如说,摄像头)

2.安装监视器

3.在合适的时候连接打开监视器查看

好了,就是这么简单!
回到android接口回调:

如果把一个自定义控件比作租客,外边的Activity或其他类或其他控件是房东,
第一步:我们要在自定义控件里定义一个接口(相当于买一个监听器)这个接口用来储存我们控件【发生的状态改变】

public interface OnLockListener{
	void onLock();
}

第二步:定义一个方法 (相当于设置监听器) 让外部的类来调用这个方法 这个方法里面放一个监听器(也就是第一步里设置的那个监听器) 重点来了 在这个方法里初始化我们的监听器 把他mListener = listener

private OnLockListener mListener;  //我们的监听器的引用
public void setOnLockListener(OnLockListener listener){
	this.mListener=listener;
}

第三步:在状态发生【改变】的地方调用我们的监听方法(我们自定义控件内部是知道自己的状态发生的改变)

if(mListener!=null){
	mListener.onLock();
}

第四步:在需要我们自定义控件状态发生改变的类里或者activity里找到这个控件然后设置监听

ScrollView sv=(ScrollView)findViewById(R.id.sv_lock);
	sv.setOnLockListener(new ScollView.OnLockListener(){
		@Override
		public void onLock(){
		finish();
		}
	});

在第四步里我们传的那个监听器 传到我们的第二步里 然后把第四步传过来的监听器赋值 然后调用第三步的方法 。
重点来了 也就是接口回调的核心 我们可以看到在第三步里调用的mListener.onLock()方法 其实就是回调我们的第四步的onLock()方法 为什么了?因为我们第四步传过去的对象把他赋值给了mListener ,其实他们两个是同一个对象,所以mListener.onLock()就是回调我们第四步里的onLock()方法 这个是整个回调的核心.

**接口回调的主要作用 **

假设activity拿到自定义控件的状态,然后finish()掉activity自己(就相当于滑动解锁) ,我们可以看到在我们自定义控件类里面 其实我们是可以拿到activity 然后finish掉自己,但是这样做不好,因为这个自定义控件在activity里面, 如果我们的自定义控件是在dialog(对话框)里面或者在其他的类里面,若想关闭它, 就需要修改自定义控件里的代码了,dismiss()关掉它,这样拓展性一点也不好,如果通过接口就不必要修改自定义控件的代码了。我们使用接口回调这一方法的作用就是:自定义控件自身发生了【改变】 ,然后把这个信息发布出去,谁想要得到这个信息就监听它的状态,然后做出相应的逻辑处理。这就体现了接口回调的主要作用 。

接口回调步骤example【接口回调的初始化的步骤】:
Android的button的setOnClickListener是一个经典的接口回调例子,我们点了这个button就可以执行我们在onClick里面的代码了。

  fragmentb_bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //执行代码...
            }
        });

1.定义一个接口,接口里面写执行的方法

    public interface GetData {
        void onCli(String str);//参数自定义
    }

2.需要引用的地方持有该接口的引用

 private GetData getData;

3.持有该接口的地方生成该接口的set方法

public void setGetData(GetData getData) {
        this.getData = getData;
    }

4.需要调用的地方调用接口

      setGetData(new GetData() {
            @Override
            public void onCli(String str) {
            //需要执行方法的代码...
                Toast.makeText(this.getContext(),str,Toast.LENGTH_LONG).show();
            }
        });


5.设置接口值

 getData.onCli("我最牛B");

最后一步是我们设置了这个参数后,第四步写的代码才会被执行。Button的setOnClickListener也是,只不过setOnClickListener的onClick的参数是View,不需要我们手动去设置。如果还不懂再看下面一张图。

这里写图片描述

另外还有一种接口使用方法,就是在建立好接口类后,在需要用到接口的类中implements这个接口类,就可以建立好这个类和接口类的关系了,然后就可以直接回调接口的方法,详细见详解Android接口Interface的使用和意义

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值