[基础控件]—状态切换控件CompoundButton及其子类CheckBox、RadioButton、ToggleButton、switch事件监听与场景使用

[基础控件]—状态切换控件CompoundButton及其子类CheckBox、RadioButton、ToggleButton、switch事件监听与场景使用一、事件监听对于普通的Button,对其进行事件监听Google官方给出了常见的三种监听方式:1、对每一个button设置事件监听器button.setOnClickListener(View.Onc

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

一、事件监听

对于普通的Button,对其进行事件监听Google官方给出了常见的三种监听方式:1、对每一个button设置事件监听器button.setOnClickListener(View.OnclickListener  listener);此种方法当button按钮较多时代码显得多、乱、不够简洁明了。

2、在Activity中实现接口View.OnclickListener,然后重写void onClick(View v)方法,在方法中通过switch(v.getId())予以区分不同Button。此种方法较为简洁,但是需要实现View.OnclickListener接口。3、在xml布局中在想要被监听的

button上添加属性:android:onClick=”doClick”属性。在Activity 中添加监听方法public void doClick(View view){},此种方法书写简单、明了、不需要实现额外的接口。推荐使用此种方法。也是Google官方文档中常见用法。

对于状态切换控件CompoundButton,不仅要对事件触发的监听,还有对状态切换的监听。所以在CompoundButton中需要对其进行两个监听:事件触发、状态切换。监听的方式与普通Button三种监听方式相似。只不过是多了一个监听状态的一项

而已。说多了都是废话,还是直接上码。

场景一:对UI界面上多个CompoundButton的事件监听做统一处理。

<ToggleButton
        android:id="@+id/togglebutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="doClick"
        android:textOff="关"
        android:textOn="开" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <CheckBox
            android:id="@+id/checkbox_meat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClick"
            android:text="肉" />

        <CheckBox
            android:id="@+id/checkbox_cheese"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClick"
            android:text="奶" />
    </LinearLayout>

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/radiobutton_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClick"
            android:text="增" />

        <RadioButton
            android:id="@+id/radiobutton_delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClick"
            android:text="刪" />

        <RadioButton
            android:id="@+id/radiobutton_update"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClick"
            android:text="改" />

        <RadioButton
            android:id="@+id/radiobutton_seach"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClick"
            android:text="查" />
    </RadioGroup>

有了布局,下面上Java代码对其所有的CompoundButton控件进行统一监听

/**
     * 向上转型的目的是为了获取子控件当前状态。
     * @param view
     */
    public void doClick(View view) {
        //1、被选中:toogle中isChecked==on
        boolean isChecked=((CompoundButton)view).isChecked();//向上转型:获取当前状态
        //2、被点击
        switch (view.getId()) {
        case R.id.togglebutton:
            if(isChecked){
                Log.i("MyInfo", "开");
            }else{
                Log.i("MyInfo", "关");
            }
            break;
        case R.id.checkbox_meat:
            if(isChecked){
                Log.i("MyInfo", "肉被选中");
            }else{
                Log.i("MyInfo", "肉被取消");
            }
            break;
        case R.id.checkbox_cheese:
            
            break;
        case R.id.radiobutton_add://切记:RadioButton无状态的切换,仅有按钮的切换。所以仅需判断选中状态 if(isChecked)
            if(isChecked)
            break;
        case R.id.radiobutton_delete:
            if(isChecked)
            
            break;
        case R.id.radiobutton_update:
            if(isChecked)
            break;
        case R.id.radiobutton_seach:
            if(isChecked)
            break;
        default:
            break;
        }
    }

在doClick()方法中总体上执行了两个步骤:1被选中—->2被点击。通常这两个步骤先后顺序应该为被点击—–>被选中。但是这样需要对每一个子控件分支中都需要添加是否被选中的判断,代码显得重复。

所以在此我们使用逆向被点击—–>被选中。在被选中这一步中使用一个向上转型是为了可以获取所有CompoundButton子类的状态。如果直接强转为某一具体子类,则不具备通用性,不适应判断所有CompoundButton

子类的被选中状态。

当UI界面中状态切换控件CompoundBuuton与普通Button均存在的情况下,建议对两种控件的使用不同的方法进行监听,例如:android:onClick=”compoundButtonClick”与android:onClick=”buttonClick”

 

二、CompoundButton扩展

—未完待续

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

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

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


相关推荐

  • c语言字符串分割函数「建议收藏」

    c语言字符串分割函数「建议收藏」C语言字符串分割strsep函数用于分解字符串为一组字符串。定义语句为char*strsep(char**stringp,constchar*delim);使用实例:#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;string.h&gt;intmain(){charstr[]="$GP…

    2022年5月2日
    40
  • 全国计算机考试python 培训

    全国计算机考试python 培训很多同学想考python的证书,想知道Python有哪些含金量高的证书?一、全国计算机等级考试Python程序语言设计;二、PythonInstitute资格认证初级PCEP;三、PythonInstitute资格认证初级PCEP中级PCAP;四、PythonInstitute资格认证初级PCEP高级PCPP;五、工信部Python技术应用工程师专项技术证书;六、百度技术认证深度学习工程师。现在比较热门的有全国计算机等级考试Python程序语言设计、工信部Python技术应用工程师专项技术证书、百度技

    2022年9月6日
    0
  • java获取时间毫秒_java秒转换成时分秒

    java获取时间毫秒_java秒转换成时分秒有没有办法在几秒钟内获得当天的当前时间?注意我问的是当天的时间,而不是UTC时间。我想要的是0到86,400(12:00AM-11:59PM)之间的值(以秒为单位)。我正在开发一个每天工作的应用程序,当这一天结束时,时间(以秒为单位)应该再次重新开始0。所以我们说它是10:00AM。我应该得到36,000秒,如果我的时间是5:00PM,我应该得到61,200秒。PS:我不知道手头的时…

    2022年9月5日
    2
  • 图论简介[通俗易懂]

    图论简介[通俗易懂]这里介绍图论(GraphTheory),图论是计算机科学中非常重要的一部分内容,甚至可以单独划分成为一个领域。很多人第一次接触到图论这个词,就觉得图论是研究和图画相关的内容。不过当大家真的去学习图

    2022年8月1日
    7
  • 代价函数总结[通俗易懂]

    代价函数总结[通俗易懂]代价函数是学习模型优化时的目标函数或者准则,通过最小化代价函数来优化模型。到目前为止,接触了一些机器学习算法,但是他们使用的代价函数不一定是一样的,由于,在现实的使用中,通常代价函数都需要自己来确定,所以,这里总结一下,代价函数都有哪些形式,尽量揣测一下,这样使用的原因。1.均方差代价函数这个是Andrewng的机器学习课程里面看到的损失函数,在线性回归模型里面提出来的。表示模型所预测(假设

    2022年4月29日
    42
  • monkey稳定性测试怎么做_monkey测试教程

    monkey稳定性测试怎么做_monkey测试教程一、什么是稳定性测试?通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行二.Money是什么?Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了官方介绍:…

    2022年9月9日
    0

发表回复

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

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