compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;「建议收藏」

compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;「建议收藏」当我们想要实现了一个简单的有状态切换的控件的时候,我们通常会去实现,CompoundButton来实现我们想要的一个效果,最常见的就是系统的CheckBox,但是在使用的过程中,我们会发现一个问题就是:我们在使用SetChecked的时候,总是会触发,onCheckedChanged这个回掉方法;那么怎么样才能做到不触发这个回掉方法呢?首先我们需要知道为什么会触发这个方法;查看源码如下:pu

大家好,又见面了,我是你们的朋友全栈君。

当我们想要实现了一个简单的有状态切换的控件的时候,我们通常会去实现,CompoundButton来实现我们想要的一个效果,最常见的就是系统的CheckBox,但是在使用的过程中,我们会发现一个问题就是:我们在使用SetChecked的时候,总是会触发,onCheckedChanged这个回掉方法;
那么怎么样才能做到不触发这个回掉方法呢?
首先我们需要知道为什么会触发这个方法;查看源码如下:

public void  setChecked(boolean checked) {
    if (mChecked != checked) {
        mChecked = checked;
        refreshDrawableState();

        // Avoid infinite recursions if setChecked() is called from a listener
        if (mBroadcasting) {
            return;
        }

        mBroadcasting = true;
        if (mOnCheckedChangeListener != null) {
            mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
        }

        if (mOnCheckedChangeWidgetListener != null) {
            mOnCheckedChangeWidgetListener.onCheckedChanged(this, mChecked);
        }

        mBroadcasting = false;            
    }
}

我们发现一个问题就是:只要我们设置了监听器,是会始终触发onCheckedChanged里面的回掉方法的,所以这里我们在调用SetChecked的时候不想触发OnCheckedChanged里面的方法的时候,我们在调用之前将这个监听器设置为空,掉用结束后,再次设置监听器;
具体如下:

mCheck.setOnCheckedChangeListener (null);
mCheck.setChecked (false);
mCheck.setOnCheckedChangeListener (mListener);

这样的话,就完美解决了,setChecked触发了onCheckedChanged里面的监听的方法;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136334.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略

    Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略目录dlib库的简介dlib库的安装dlib库的使用函数0、利用dlib.get_frontal_face_detector函数实现人脸检测可视化1、hog提取特征的函数2、CNN提取特征的函数dlib库的简介一个机器学习的开源库,包含了机器学习的很多算…

    2022年6月29日
    41
  • 前端VSCode常用插件「建议收藏」

    前端VSCode常用插件「建议收藏」前端VSCode常用插件1.Chinese(Simplified)vscode下载完毕是英文版的,先安装这个插件,改为中文版,所以是我们第一个安装的插件。2.AutoRenameTag修改开始标签,结束标签跟着自动变化,比较好用。3.OneDarkPro颜色主题4.格式化代码(vscode系统自带)但是html标签嵌套比较多,可能需要自动格式化比较好,所以我们可以利用vscode自动的功能格式化代码,暂且不用格式化插件,自动保存照样能格式化代…

    2022年7月25日
    5
  • 隐藏窗口任务栏图标的三种方法

    隐藏窗口任务栏图标的三种方法本文介绍三种方法,可以实现隐藏窗口在任务栏中的图标。其中前两种比较坑爹,不建议使用。转载:原文:https://www.xuebuyuan.com/1338887.html方法1:ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);为窗口设置WS_EX_TOOLWINDOW属性。会有以下效果:1.窗口图标不在任务栏显…

    2022年7月19日
    11
  • webpack css_webpack打包有哪些文件

    webpack css_webpack打包有哪些文件css文件处理-准备工作(以下项目配置都是基于上一篇webpack(4)的基础上)在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中。这里我们就在src目录中创建一个n

    2022年7月30日
    2
  • 雅典娜暴利烹饪系列(下)「建议收藏」

    雅典娜暴利烹饪系列(下)「建议收藏」”呀–呀–呀–“爬到冰箱上的纱织吓的花容失色,”快点把那些土鳖拿开啦—-“端着一盆螃蟹的迪马斯头上好几个”加号”:”你叫个什么劲呀!!!不是你要学煮螃蟹,叫我下河给你捞的吗?!!这是螃蟹!!!螃蟹!!!!”纱织眼睛里无辜的泪水在打转:”骗人!螃蟹明明是红色的~~~””那是煮熟的好不好!!!”迪马斯已经在昏倒的边缘,”快拿去!!!””不要呀~~~~好可怕呀~~~~~”玉手一挥,螃蟹

    2022年7月11日
    16
  • 超酷汇编教程-- 简明x86汇编语言教程(1)

    超酷汇编教程-- 简明x86汇编语言教程(1)第○章写在前面我不想夸大或者贬低汇编语言。但我想说,汇编语言改变了20世纪的历史。与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘、坐在显示器面前,甚至使用鼠标、语音识别。我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来

    2022年6月21日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号