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类在一个适当的时机“使用”这个接口变量,即调用接口中的函数(这个函数就是所谓的回调函数)。
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值