有没有办法检查是否从用户
检查了CheckBox
private android.widget.CheckBox.OnCheckedChangeListener checkboxListener = new android.widget.CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
}
我通过实现自定义CheckBox类来解决这个问题,该类包装CheckBox并保存来自用户的布尔值,也实现了自定义侦听器,并重载了setChecked(boolean checked,boolean fromUser)。
`public class PaCheckBox扩展了CheckBox {
private static boolean fromUser;
public PaCheckBox(Context context) {
super(context);
}
public PaCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PaCheckBox(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setChecked(boolean checked, boolean fromUser){
setChecked(checked);
PaCheckBox.fromUser = fromUser;
}
@Override
public void setChecked(boolean checked) {
super.setChecked(checked);
PaCheckBox.fromUser = true;
}
@Override
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
super.setOnCheckedChangeListener(listener);
}
public static class PaOnCheckBoxChangeListener implements android.widget.CheckBox.OnCheckedChangeListener {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked, boolean fromUser) {
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
onCheckedChanged(buttonView,isChecked,PaCheckBox.fromUser);
}
}
} `
答案 0 :(得分:1)
private android.widget.CheckBox.OnCheckedChangeListener checkboxListener = new android.widget.CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(isChecked)
{
> do what ever you want
}
}
答案 1 :(得分:0)
你要使用正确的代码,你需要放置条件。
private android.widget.CheckBox.OnCheckedChangeListener checkboxListener = new android.widget.CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
Log.e("Log","user checked box");
else
Log.e("Log","user Unchecked box");
}
答案 2 :(得分:0)
试试这个,
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()) {
//your code here
//this will be true here by default you need not write checkBox.setChecked(true);
} else {
//not checked by user
//this will be false here by default you need not write checkBox.setChecked(false);
}
}
});
答案 3 :(得分:0)
这是一个有趣的问题,引起了一些混乱。我相信你要求的是类似于SeekBar fromUser boolean whch表示用户是否点击了屏幕或者是否以编程方式更改了复选框。 此要求的一个有用示例是在使用复选框传播列表视图时。由于View是最新的,因此需要通过输入相关数据的持有者来设置值。 无论用户是否触摸srceen作为故意选择,都将触发OnClickListener。而在SeekBar的情况下,boolean fromUser允许程序员做出选择....就像你使用了包装器一样。 我是java的新手,虽然,我确信除了你的包装器必须有一个解决方案,我还没找到一个...如果我这样做会让你知道。
答案 4 :(得分:0)
只是一个想法,我觉得有用,使用OnClickListener。仅在用户触摸控件时调用它。如果app更改检查状态,则不会调用它。
findViewById(R.id.switchFound).setOnClickListener(new View.OnClickListener () {
@Override
public void onClick(View v) {
boolean isChecked = ((Switch) v).isChecked();
}
});
答案 5 :(得分:-1)
boolean isChecked
中的 onCheckedChanged()
代表了这一点。如果选中了true
,则选中了CheckBox
,然后取消选中false
。
private android.widget.CheckBox.OnCheckedChangeListener checkboxListener = new android.widget.CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
// user has check the checkbox
else
// user has uncheck it
}
<强> From official document 强>
public abstract void onCheckedChanged (CompoundButton buttonView, boolean isChecked)
复合按钮的选中状态发生变化时调用。
参数的
buttonView - 状态已更改的复合按钮视图。
isChecked - buttonView的新检查状态。
注意:我强烈建议您在寻求帮助之前阅读文档以了解您有任何疑问。