问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android onclicklistener是java函数回调机制吗

发布网友 发布时间:2022-05-07 08:09

我来回答

5个回答

热心网友 时间:2023-10-21 23:48

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

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子类的对应方法。

热心网友 时间:2023-10-21 23:49

是的,只要是你写的代码但不是你直接调用的,基本都是回调。
抽象方法就是为回调设计的。

热心网友 时间:2023-10-21 23:49

是的,用的就是匿名的方式,新建了一个回调函数,然后通过注册监听,当触摸屏幕时,就会执行该方法里面的逻辑代码.其实回调机制,我的理解就是使用了类似于c语言的指针概念.

热心网友 时间:2023-10-21 23:48

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

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子类的对应方法。

热心网友 时间:2023-10-21 23:49

是的,只要是你写的代码但不是你直接调用的,基本都是回调。
抽象方法就是为回调设计的。

热心网友 时间:2023-10-21 23:50

1. 肯定是回调机制

热心网友 时间:2023-10-21 23:50

是通过回调来把方法暴露出来的

通过匿名内部类实现方法

热心网友 时间:2023-10-21 23:49

是的,用的就是匿名的方式,新建了一个回调函数,然后通过注册监听,当触摸屏幕时,就会执行该方法里面的逻辑代码.其实回调机制,我的理解就是使用了类似于c语言的指针概念.

热心网友 时间:2023-10-21 23:50

1. 肯定是回调机制

热心网友 时间:2023-10-21 23:51

是通过回调来把方法暴露出来的

通过匿名内部类实现方法

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
现在厨师一个月工资是多少,炒菜和配菜,在什 成都厨房工资多少钱一个月 现在厨师一个月工资是多少,炒菜和配菜,在什么地方的价格,请详细点,谢 ... 华硕电脑上没有触摸板设置华硕笔记本电脑触摸板怎么开启 新买的光碟DVD-R是空白的,我想把他制作成一个系统光碟,谁知道怎么制 ... 请问空白光盘刻录车载DVD后,播放时只有目录放不出来是怎么回事啊?_百 ... 请问将一张DVD-R空白光盘作为数据盘使用能够重复写入或者续写数据吗?谢 ... 我现在有DVD-R盘,怎样刻录?一定需要刻录机吗? 做辣椒酱为什么要放酒 做辣椒酱为啥要放酒 2024年区块链的趋势和方向 c#-回调callback是什么原理,机制? C# java构造器是不是就是构造函数,还有回调机制是什么东西 有没有教男生怎么搭配衣服的手机APP给我推荐下 4g手机哪款比较好用 什么手机可以用4g网络 哪种类型的手机可以用4G 什么型号手机可以用4G卡 西安市医保卡个人账户缴费查询 陕西省医保查询个人账户查询 继承父亲的房产需要什么手续 子女继承父母的房产需要哪些手续 继承父亲的房子需要什么手续 目前继承父母房产需要什么 我的被盗了,手机号和实名认证都被改了,要怎么找回,帮帮忙? 被盗 ,全部信息被改,怎么找回 ? 被盗,被冻结了,好友都被拉黑了,我怎么找回? 被盗,如何找回? 被盗了,没办法找回,怎么办 求一句英语翻译“你也可以通过我们的官网了解更多信息” 第二你也可以与外教交谈来提升你的英语的英文翻译? 服务器不支持MySql数据库,如何安装论坛程序??? 最有效的表白 5句话以上 怎么手工制作故事书 电脑版查看黑名单 ;鼻子不通气,流清鼻涕 感冒了,鼻子不通,流清鼻涕 如何找到设置的黑名单?在电脑上我的一好友误入黑名单,怎么样找回? 怎么找黑名单? 怎么才能找到黑名单 最近两天流清鼻涕,有时一个鼻子不通,怎么办? 开一家火锅加盟店需要些什么条件 串串火锅加盟费是多少 我是一名餐饮店店长,4月25入职,未签订劳动合同。5月份我招聘一名员 餐饮店服务员,想这个月月底离职,提前10天和说了,店长说必须干满一个月,没有签合同,干不满不给工资? piss me off 翻译 pissy me off 是什么意思 piss me off 什么意思 don't piss me off you really piss me off piss me off 中文何解?