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

如何在android上接收事件复选框检查更改?,android,events,checkbox,Android,Events,Checkbox,当复选框被启用或禁用时,接收和发送事件的正确方式是什么 在C#中,我可以轻松地双击,所有代码都可以为我完成。但在安卓系统中,它似乎有点模糊。我曾想过使用触摸事件处理程序,但如果用户有键盘,它将无法检测到更改,因为它不是触摸。我认为android应该有一个用于复选框状态更改的本机事件。由于复选框(最终)扩展了视图,您可以使用标准的OnClickListener来检测用户实际点击复选框的时间(与ListView更新相反): CheckBox repeatChkBx = ( CheckBox ) fi

当复选框被启用或禁用时,接收和发送事件的正确方式是什么

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

由于复选框(最终)扩展了视图,您可以使用标准的OnClickListener来检测用户实际点击复选框的时间(与ListView更新相反):

CheckBox repeatChkBx = ( CheckBox ) findViewById( R.id.repeat_checkbox );
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
            // perform logic
        }

    }
});
试试这个 在科特林:

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

虽然这是正确的答案,但我很好奇,如果复选框位于ListView项中,并且每次用户滚动经过onCheckedChange时都会调用它,那么最好的方法是什么。有没有办法区分是由用户还是由listview更新启动的?^这条@Rmooney的评论是金色的!我有一个问题与RecyclerView适配器,每次我滚动它疯了叫不止一次!谢谢在适配器中,当您为该特定支架设置checkchange时。首先删除侦听器,更改值,然后读取侦听器。复选框本身会强制调用侦听器,因此您必须删除它才能在不触发它的情况下设置值。如果用户决定拖动开关而不是单击开关,则不会触发该选项。@Silvia H复选框不是开关。你不能在复选框上拖拽任何东西。通过自己键入代码而不是按自己的方式进行编码,没有什么“模糊”的地方。
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
            }
        }
    });
   checkBoxView.setOnCheckedChangeListener { _, isChecked ->
        print("checked: $isChecked")
    }