Android 检查是否选中了任何复选框

Android 检查是否选中了任何复选框,android,checkbox,actionlistener,dayofweek,Android,Checkbox,Actionlistener,Dayofweek,我在android应用程序中有一周的复选框,我想让一个监听器检查这些复选框中的任何一个是否被选中,但我的方法似乎很难,难道没有一种方法可以将所有监听器集中到一个中吗 sun.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if ( isChe

我在android应用程序中有一周的复选框,我想让一个监听器检查这些复选框中的任何一个是否被选中,但我的方法似乎很难,难道没有一种方法可以将所有监听器集中到一个中吗

 sun.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});

    mon.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});
    tue.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});
    wed.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});
    thu.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});
    fri.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});
    sat.setOnCheckedChangeListener(new OnCheckedChangeListener()
    {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        { if ( isChecked )
            {
            count=count+1;
                // perform logic
            }
        else
        {
            count=count-1;
        }
        }});

您可以检查正在触发的buttonView的id并进行适当的验证,只需将相同的onCheckListener分配给复选框并执行如下操作:

private OnCheckedChangeListener checkedListener = new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        switch(buttonView.getId()){
        case R.id.checkId1:
            //TODO: Code for checked one...
        break;
        case R.id.checkId2:
            //TODO: Code for checked two...
        break;
        }
    }
};
希望有帮助


问候

如果您具有此处未提供的类似逻辑,您可以创建一个复选框列表,并在一个周期内为其创建侦听器。

让您的活动实现OnCheckedChangeListener,然后您就拥有onCheckChanged

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    switch (buttonView.getId()) {
    case R.id.sun:

        break;

    case R.id.mon:

        break;

    default:
        break;
    }

}

有,;在类中使用他的方法实现View.OnClickListener

@Override
    public void onClick(View v) {

        switch (v.getId()){

            case R.id.checbox1:

                      if(checkbo1.isCheck){
                         //do logic then dont forget to set to the opposite state
                           checkbox.setChecked(false);
                      }
                      else{
                           //do logic
                          checkbox.setChecked(true);
                      }
                      break;
//
            case R.id.checbox2:
                        //do logic etc...
                      break;


        }

    }
然后在来自用户的不同点击事件之间使用切换案例处理


希望能有所帮助当然还有一个更简单的方法。只需在执行此操作的地方将您的活动实现为OnCheckdChangeListener

public Class MyActivity extends Activity implements OnCheckedChangeListener{

    //your activity logic in here


    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         //your Activity will now receive onCheckedChangeEvents here from
         //the checkboxes to which you assign it as a listener
    }

}
,在onCreate中,在获得对所有一天复选框的引用后,将活动设置为侦听器,如下所示

@Override
public void onCreate(Bundle savedInstanceState){
    //first get references to all your checkboxes and assign them to mon, tue, wed etc.
    //then set the listeners
    mon.setOnCheckedChangeListener(this);
    tue.setOnCheckedChangeListener(this);
    wed.setOnCheckedChangeListener(this);
    thu.setOnCheckedChangeListener(this);
    fri.setOnCheckedChangeListener(this);
    sat.setOnCheckedChangeListener(this);
    sun.setOnCheckedChangeListener(this);
}
<CheckBox
    android:id="@+id/checkMonday"
 ....
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    int id = buttonView.getId();
    if(isChecked){
        counter++; //a day has been checked
    }else{
        counter--; //a day has been unchecked
    }
    switch(id){
        case R.id.checkMonday:
             //logic for Monday
             break;

        case R.id.checkTuesday:
             //logic for Tuesday
             break;

        ...
    }
}
,确保在布局xml中为所有复选框分配了ID,如下所示

@Override
public void onCreate(Bundle savedInstanceState){
    //first get references to all your checkboxes and assign them to mon, tue, wed etc.
    //then set the listeners
    mon.setOnCheckedChangeListener(this);
    tue.setOnCheckedChangeListener(this);
    wed.setOnCheckedChangeListener(this);
    thu.setOnCheckedChangeListener(this);
    fri.setOnCheckedChangeListener(this);
    sat.setOnCheckedChangeListener(this);
    sun.setOnCheckedChangeListener(this);
}
<CheckBox
    android:id="@+id/checkMonday"
 ....
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    int id = buttonView.getId();
    if(isChecked){
        counter++; //a day has been checked
    }else{
        counter--; //a day has been unchecked
    }
    switch(id){
        case R.id.checkMonday:
             //logic for Monday
             break;

        case R.id.checkTuesday:
             //logic for Tuesday
             break;

        ...
    }
}

那就应该成功了

您可以创建一个最终的OnCheckChangeListener,只需按按钮重用它,而不是重写代码。此外,count+=1与count=count+1相同,并且更易于阅读,imoit说“参数侦听器的修饰符非法;只允许使用final”即使最终使用了相同的错误,也要提前感谢。它会说,只有在方法中有侦听器的情况下,如果将侦听器移动到成员级别(在任何方法之外,但在类中),它才能工作,在继续使用Android之前,您应该阅读一本好的Java书籍……您建议哪本书??:DSun认证Java程序员SE 6学习指南,作者:Kathy Sierra和Bert Bates,是Java程序员的圣经,你会喜欢它的,另外,如果你能通读并完全理解它,你可以申请Oracle Java认证考试,并且是一个保证通过的考试。。。