天天看点

android中的回调

1、引子

android中的回调

btn_rigister.setonclicklistener(new view.onclicklistener() {  

    @override  

    public void onclick(view view) {  

        // todo log in  

    }  

});  

view对外暴露了一个接口onclick

android中的回调

public interface onclicklistener {  

        /** 

         * called when a view has been clicked. 

         * 

         * @param v the view that was clicked. 

         */  

        void onclick(view v);  

我们在用的时候实现具体方法写了处理时,当前的actvity是没有对这个方法做任何操作,这个被充实之后的onclick方法被view回调处理!其中一段处理 比如

android中的回调

public boolean callonclick() {  

        listenerinfo li = mlistenerinfo;  

        if (li != null && li.monclicklistener != null) {  

            li.monclicklistener.onclick(this);  

            return true;  

        }  

        return false;  

具体可以阅读view.java

2、什么是回调

回调其实是一种双向调用模式,也就说调用方在接口被调用时也会调用对方的接口,听起来就很拗口,翻译翻译就是“实现了抽象类/接口 的实例实现了父类的提供的抽象方法,后,将该方法交还给父类来处理”,口诀念3遍,可以体会到其中的内涵了没?

主要要弄清楚一点,实现方法交还给提供接口的父类处理!

3、为什么要用回调

比如view具有被点击的通性,但是每个点击又会产生不一样的事件处理一样,因此android对外暴露一个接口有个onclick方法,你需要处理啥你就写啥,view只会调用这个方法,具体怎么处理你已经自己为不同的点击事件做了处理了。

4、如何写

一个很好的小栗子

【定义接口】 在类中定义一个interface, 并在接口中定义一个抽象方法

android中的回调

public interface callback{    

        public abstract void work();    

    }    

【接口对象】在类中定义一个该接口的成员变量

android中的回调

private callback mcallback;    

【设置对象】在类中定义一个公共方法,可以设置这个接口的对象,调用该方法给接口对象变量赋值

android中的回调

public void setcallback(callback callback) {    

       this.mcallback = callback;    

   }    

【调用方法】调用接口对象中的方法

android中的回调

public void dowork() {    

        mcallback.work();    

ok,

完整代码如下

android中的回调

public class employee {    

    /*  

     * 定义回调接口的成员变量  

     */    

    private callback mcallback;    

     * 声明回调接口  

    public interface callback{    

     * 设置回调接口对象成员变量  

    public void setcallback(callback callback) {    

        this.mcallback = callback;    

     * 调用回调接口对象中的方法  

    public void dowork() {    

}    

然后我们针对去使用就好

android中的回调

public class boss {    

    private employee employee;    

     * 为employee设置回调函数, 在这里定义具体的回调方法  

    public void setcallback() {    

        employee.setcallback(new employee.callback() {    

            @override    

            public void work() {    

                system.out.println("work");    

            }    

        });    

}    

转自:http://blog.csdn.net/xsf50717/article/details/50520462

继续阅读