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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Object转String的几种方法

    Object转String的几种方法1.object.toString()方法   这种方法要注意的是object不能为null,否则会报NullPointException,一般别用这种方法。2.String.valueOf(object)方法   这种方法不必担心object为null的问题,若为null,会将其转换为"null"字符串,而不是null。这一点要特别注意。"null"和null不是一个概念。3.(…

    2022年6月11日
    48
  • acm总结帖_By AekdyCoin

    acm总结帖_By AekdyCoinacm总结帖_ByAekdyCoin各路大牛都在中国大陆的5个赛区结束以后纷纷发出了退役帖,总结帖,或功德圆满,或死不瞑目,而这或许又会造就明年的各种“炸尸”风波。为了考虑在发退役贴以后明年我也成为“僵尸”的可能性,于是改名曰“总结贴”,不提比赛细节,不提比赛流水账,权当是大学本科生涯中acm生活的点滴记录……(1)入门篇甲PS:以下内容…

    2022年7月23日
    15
  • 遍历map的几种方法?_hashmap如何遍历

    遍历map的几种方法?_hashmap如何遍历#先往map加入几个数据Map<Integer,String>map=newHashMap<>();map.put(1,”美好的周一”);map.put(2,”美好的周二”);map.put(3,”美好的周三”);方法一:普通的foreach循环,使用keySet()方法,遍历keyfor(Integerkey:map.keySet()){System.out.println(“key:”+key+

    2022年9月21日
    3
  • linux中的ldd命令简介

    linux中的ldd命令简介在linux中,有些命令是大家通用的,比如ls,rm,mv,cp等等,这些我觉得没有必要再细说了。而有些命令,只有开发人员才会用到的,这类命令,作为程序员的我们,是有必要了解的,有的甚至需要熟练使用。有的人总说,这些命令不重要,用的时候去查就行了,这么多么扯淡的说法啊。具体用法细节是可以可查,但至少得知道有ldd这个东西吧。连ldd都不知道,怎么知道ldd是干啥的呢?

    2022年4月28日
    77
  • 计算机操作系统-操作系统的定义

    计算机系统的层次结构 用户 应用程序 操作系统 纯硬件:CPU、RAM、ROM 其中,操作系统:从操作系统层往两侧看:负责管理协调硬件、软件等计算机资源的工作 从上往下看:为上层的应用程序和用户提供简单易用的服务 从下往上看:操作系统系统软件,而不是硬件定义OperatingSystem是指控制和管理整个计算机系统的硬件和软件资源,并合理地组…

    2022年4月13日
    47
  • amd显卡测试大风车软件md,肉眼可见的撕裂 AMD将推出FreeSync2 HDR测试工具「建议收藏」

    amd显卡测试大风车软件md,肉眼可见的撕裂 AMD将推出FreeSync2 HDR测试工具「建议收藏」如何让显示器输出帧数和显卡保持动态同步一直是让厂商们头疼的问题,因此NVIDIA推出了付费的G-Sync同步技术,AMD推出了免费的RadeonFreeSync显示技术,两者的作用方式都是让显示器更新率与电脑输出的FPS同步,让游戏画面不再撕裂、抖动,达到更滑顺的游戏表现,但若玩家没自行比较,也很难从分享文的字里行间体会到这差异。我们之前看过AMD推出的大风车测试Demo,也看过NVIDIA推出…

    2022年6月10日
    72

发表回复

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

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