如何在 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 复选框检查更改上接收事件?的主要内容,如果未能解决你的问题,请参考以下文章