关于安卓回调的一些理解

来源:互联网 发布:淘宝模板什么意思 编辑:程序博客网 时间:2024/05/18 02:03

以安卓Button组件为例,先上代码:

对于安卓自身系统层:

1.定义接口:

public interface OnClickListener{

public onClick();

}

2.定义Button:

public class Button{

public setOnclickListener(OnClickListener onClickListener){

onClickListener.onClick();

}

}


对于开发APP的程序员:

在布局文件定义Button的ID:btn。

public class Activity{

Button button =(Button) findViewById(R.id.btn);

button.setOnclickListener(new OnClickListener(){

@Override

public void onClick(View view){

//点击按钮实现的响应

}

})

}

上面的过程就是一个回调的过程,首先作为安卓系统而言,它不可能把点击的所有响应都给你定义出来,而只是定义好一个Button 组件,在里面放一个setOnClickListener()方法,再把OnClick接口作为实参传到方法中,这时候开发人员要用Button组件,调用setOnClickListener()时,在参数定义了一个匿名内部类,当然匿名的累不能正常的new出来,所以这里使用接口加匿名类来创建这个接口对象的,相当于是new 一个匿名类然后实现了OnClickListener接口,那么这个匿名类必然要重写里面的方法,这个类把引用(实际上就是对象的首地址)传给系统setOnClickListener(),而setOnClickListener()的里面的逻辑却是调用onClick()方法,系统的onClick()是没有方法体的,这时系统反过来调用程序员实现了的方法,就实现了按钮点击的响应。

/**************************************************************************************************************************************************/

那么要实现两个对象之间的传值呢?其实原理都一样的,如下代码:

interfaceCALL {
    void get_in(intabc);
}

publicclassinterface_class {
     
    intaaa=14;
    intgetdata(CALL call){
            call.get_in(aaa);
                return1;
            }
     
}




publicclasscallbacttest {
            publicstaticvoid main(String[] args) {
            intx= newinterface_class().getdata(newCALL() {
                     
                    @Override
                    publicvoidget_in(intbbbb) {
                        System.out.println(bbbb);//打印出传过来的值,当然你也可以定义一个变量保存起来
                         
                    }
            });
            System.out.println(x);
            }
}

interface_class里面的14就已经传到callbacttest里面并且打印出来了。


0 0
原创粉丝点击