android 接口回调理解

本文介绍了Android接口回调的概念,通过实例展示了如何实现按钮点击事件监听和异步任务数据回调。接口回调的主要目的是解耦,使得代码更加灵活和易于管理。

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

接口大概意思:

  • 工人class B:想干一件事(如打电话),但没工具(如手机)。注:最终还是他自己干。
  • 租赁人class A:是租赁工具的,有很多工具,其中包括B要接的工具(手机)。
  • 工具箱interface :手机、电脑、扳手、烙铁。。。

实例实现过程是:

A把带工具(interface)和方法都借给了B,B完成了想干的事(打电话)。
另:A向B出借东西时,可以有附件约定/规定。

为啥这么做:

  1. 解耦,出租人A、承租人B、工具接口全部解耦。
  2. 其他人C、D、E…不必各自占有工具,想干活都想A借,方便管理,节约资源。
  3. B、C、D、E…等人借来工具后,怎么干活,什么时候干活,还想干些啥自己说了算。

例子:

interface 手机(){
	打电话();
	充电();
	玩游戏();
	doanything()。。。。。//手机可以干的其他事
}

class A{
    手机 _手机;
    //相当于构造函数初始化赋值。
    void set手机(手机 _手机){
        this._手机 =_手机;

    }
    
	借手机(){
		手机.打电话();
		休息2分钟在用手机();//出租人A可以规定让承租人B某些事,或者怎么敢。。。可以在这里约定。如用开启线程,一边玩游戏,一边打电话。
		手机.玩游戏();
		dosomething();
	}
	借电脑(电脑){};
	....
}

class B{
	A a = new A()//
	a.set手机(华为手机)//可以用匿名函数初始化。
	a.借手机()


	手机 华为手机 = new 手机(){
		@Override
		打电话(){
			打给女朋友,秀恩爱。
		}
	
		@Override
		玩游戏(){
			玩下望着荣耀。
		}
		
		@Override
		充电(){};    //B不充电,可以不干,即不用实现。
		
		@Override
		doanything(){};     //B不干其他事了,也即不用实现。
		}
}

实例

(对于Android界面上Button点击事件监听的模拟):

1.定义接口

 public interface OnClickListener {
      public void OnClick(Button b);
    }

2. 定义Button

    
 public class Button {
      OnClickListener listener;
      public void click() {
        listener.OnClick(this);
      }
      public void setOnClickListener(OnClickListener listener) {
        this.listener = listener;
      }
     }

3. 将接口对象OnClickListener 赋给 Button的接口成员

    public class Activity {
      public Activity() {
      }
      public static void main(String[] args) {
        Button button = new Button();
        button.setOnClickListener(new OnClickListener(){
          @Override
          public void OnClick(Button b) {
            System.out.println(clicked);
          }
        });
        button.click();
      }
    }

实例2:

增加一个demo 有助于进一步理解。
主线程开启一个异步任务,当异步任务接收到数据,则把数据用TextView显示出来

1、定义接口:

首先 我们需要定义一个接口,定义一个方法,参数为一个字符串:


public interface ChangeTitle {
    void onChangeTitle(String title);
}

2、定义MyTask :

写一个异步任务,把接口作为构造方法参数,在doInBackground()方法中判断如果有数据,则接口回调

import android.os.AsyncTask;
 
public class MyTask extends AsyncTask<String,Void,String> {
 
    private ChangeTitle changeTitle;
 
    public MyTask(ChangeTitle changeTitle){
        this.changeTitle = changeTitle;
    }
 
    @Override
    protected String doInBackground(String... params) {
        if (params[0]!=null) {
            changeTitle.onChangeTitle(params[0]);
        }
        return null;
    }
}

3、实现 接口回调:

主Activity,给异步任务参数传this,即 接口回调方法在此类中执行,那么就需要实现ChangeTitle接口,重写接口中onChangeTitle 方法

 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
import test.ban.com.callback.R;
 

public class MyTaskActivity extends Activity implements ChangeTitle {
 
    private TextView mTextView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mTextView = (TextView) findViewById(R.id.tv);
        new MyTask(this).execute("我是标题");
    }
 
    @Override
    public void onChangeTitle(String title) {
        mTextView.setText(title);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值