android onclicklistener是java函数回调机制吗

 我来答
0797AT1500
2017-02-10
知道答主
回答量:17
采纳率:0%
帮助的人:6.5万
展开全部

很多时候,对某个控件实现点击事件的监听,会像下面这样做:

Button btn = new Button(this);
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // doSth
    }
});

按照上面所说的,可以调用接口的方法,但是接口需要一个具体的实现,所以应该知道,setOnClickListener中的参数应该是一个接口

public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
}

接口中还有一个onClick方法。既然是回调,再看看这个方法在哪里被调用了

先看setOnClickListener方法

public void setOnClickListener(@Nullable OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        getListenerInfo().mOnClickListener = l;
}

关键是把OnClickListener的对象赋值给了ListenerInfo的mOnClickListener,再看下去

public boolean performClick() {
        final boolean result;
        final ListenerInfo li = mListenerInfo;
        if (li != null && li.mOnClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);
            li.mOnClickListener.onClick(this);
            result = true;
        } else {
            result = false;
        }

        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
        return result;
    }

看到在这个叫做performClick的方法中调用了onClick方法,还有另外一个叫做callOnClick的方法也会调用onClick,区别可以去看看源码的说明,这里不详细。其实都是在屏幕接收到点击信号的时候,把数据一层一层的往上传递给framework,由framework来调用。对于了解回调要明白的一点就是,在这个类中,调用的是接口的方法。就是让编译器知道,调用接口方法的时候,去回调设置的OnClickListener子类的对应方法。

学易心得5r
2016-08-30 · TA获得超过791个赞
知道小有建树答主
回答量:237
采纳率:66%
帮助的人:80.5万
展开全部
是的,只要是你写的代码但不是你直接调用的,基本都是回调。
抽象方法就是为回调设计的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户

2016-08-12
展开全部
是的,用的就是匿名的方式,新建了一个回调函数,然后通过注册监听,当触摸屏幕时,就会执行该方法里面的逻辑代码.其实回调机制,我的理解就是使用了类似于c语言的指针概念.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
砍出平成第一斧58
2016-08-11 · TA获得超过1567个赞
知道大有可为答主
回答量:2321
采纳率:86%
帮助的人:1204万
展开全部
1. 肯定是回调机制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华傲易49
2016-10-12 · TA获得超过455个赞
知道小有建树答主
回答量:935
采纳率:42%
帮助的人:298万
展开全部
  1. 是通过回调来把方法暴露出来的

  2. 通过匿名内部类实现方法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式