2010-06-30 49 views
37

当复选框启用或禁用时,接收和发送事件的正确方式是什么。在C#中,我可以轻松地双击,所有的代码将为我完成。但在android中它似乎有点模糊。我想过使用触摸事件处理程序,但如果用户有键盘,它不会检测到变化,因为它不是触摸。我想android应该有一个本机事件来检查复选框状态的变化。如何在android复选框检查更改时接收事件?

回答

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

    } 
}); 
+15

虽然这是正确的答案,我很好奇,什么是最好的办法时,该复选框是ListView项内部和onCheckedChange被调用每次用户滚动经过它的时间。任何方式来区分何时由用户和列表视图更新启动? – rmooney 2013-09-16 20:14:38

+1

^@RMoney的这个评论是黄金!我有一个RecyclerView适配器的问题,每次滚动它都会疯狂地调用不止一次!谢谢! – 2016-10-01 21:40:04

+0

在适配器中,当您为该特定持有者设置checkchange时。首先删除侦听器,更改值,然后读取侦听器。复选框本身强制调用监听器,因此您必须删除它才能设置值,而不触发它。 – Tatarize 2017-01-08 07:06:25

4

由于复选框(最终)扩展视图中,可以使用标准的OnClickListener以检测当复选框实际上是由用户轻敲(而不是到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 
     } 
    } 
}); 
0

试试这个

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 
      } 
     } 
    }); 
相关问题