来自用户的Android CheckBox回调

时间:2016-02-02 12:28:14

标签: android checkbox android-checkbox

有没有办法检查是否从用户

检查了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);
    }
}

} `

6 个答案:

答案 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的新检查状态。

注意:我强烈建议您在寻求帮助之前阅读文档以了解您有任何疑问。