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

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

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

【问题讨论】:

  • 通过自己输入代码而不是点击自己的方式进行编码,并没有什么“晦涩难懂”的地方。

标签: android events checkbox


【解决方案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")
        }
    

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多