如何在 android 复选框检查更改上接收事件?

Posted

技术标签:

【中文标题】如何在 android 复选框检查更改上接收事件?【英文标题】:How to receive a event on android checkbox check change? 【发布时间】:2011-03-10 03:06:59 【问题描述】:

启用或禁用复选框时接收和发送事件的正确方法是什么?

在 C# 中,我只需双击即可轻松完成所有代码。但在android中它似乎有点模糊。我想过使用触摸事件处理程序,但是如果用户有键盘,它就不会检测到更改,因为它不是触摸的。我认为android应该有一个用于复选框状态更改的本机事件。

【问题讨论】:

通过自己输入代码而不是点击自己的方式进行编码,并没有什么“晦涩难懂”的地方。 【参考方案1】:
CheckBox repeatChkBx = ( CheckBox ) findViewById( R.id.repeat_checkbox );
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener()

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    
        if ( isChecked )
        
            // perform logic
        

    
);

【讨论】:

虽然这是正确答案,但我很好奇当复选框位于 ListView 项目内并且每次用户滚动经过它时都会调用 onCheckedChange 时,最好的方法是什么。有什么方法可以区分用户和列表视图更新何时启动? ^@Rmooney 的这条评论是金!我遇到了 RecyclerView 适配器的问题,每次滚动它都会疯狂调用不止一次!谢谢! 在适配器中,当您为该特定持有人设置 checkchange 时。首先移除监听器,更改值,然后读取监听器。复选框本身会强制调用侦听器,因此您必须将其删除以设置值而不触发它。【参考方案2】:

由于 CheckBox(最终)扩展了 View,您可以使用标准 OnClickListener 来检测 CheckBox 何时被用户实际点击(与 ListView 更新相反):

CheckBox repeatChkBx = ( CheckBox ) findViewById( R.id.repeat_checkbox );
repeatChkBx.setOnClickListener(new View.OnClickListener() 

    @Override
    public void onClick(View v) 

        if ( ((CheckBox)v).isChecked() ) 
            // perform logic
        
    
);

【讨论】:

如果用户决定拖动开关而不是点击它,这将不会被触发。 @Silvia H CheckBox 不是开关。 CheckBox 上没有任何内容可以拖动。【参考方案3】:

试试这个

CheckBox checkbox=(CheckBox)findViewById(R.id.checkbox);
checkbox.setOnClickListener(new View.OnClickListener()

        @Override
        public void onClick(View v)
        
            if (checkbox.isChecked())
            
             //Perform action when you touch on checkbox and it change to selected state
            
            else
            
   //Perform action when you touch on checkbox and it change to unselected state
            
        
    );

【讨论】:

【参考方案4】:

在 Kotlin 中:

   checkBoxView.setOnCheckedChangeListener  _, isChecked ->
        print("checked: $isChecked")
    

【讨论】:

以上是关于如何在 android 复选框检查更改上接收事件?的主要内容,如果未能解决你的问题,请参考以下文章

Android如何在CheckBox检查事件后更新RecyclerView内TextView的文本样式

WPF 复选框:检查更改的处理

如何在android中检测禁用复选框上的触摸事件

如何更改 ITextSharp 中复选框的检查类型

复选框检查事件侦听器

更新角度范围而不触发更改事件