Проверьте, если флажок установлен

У меня есть чекбоксы для дней недели в моем приложении для 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;
        }
        }});

5 ответов

Решение

Вы можете проверить идентификатор запущенного buttonView и выполнить правильную проверку, все, что вам нужно сделать, это назначить один и тот же 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;


        }

    }

затем используйте случай переключения между различными событиями клика от пользователя

надеюсь, это поможет

Конечно, есть более простой способ. Просто сделайте свою активность там, где вы делаете это, реализуйте OnCheckedChangeListener

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, после того, как вы получите ссылки на все свои дневные флажки, установите Activity в качестве слушателя следующим образом

@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);
}

Убедитесь, что все ваши чекбоксы имеют идентификаторы, назначенные им в макете XML, как это

<CheckBox
    android:id="@+id/checkMonday"
 ....

, тогда у вас будет один метод onCheckedChange, где вы можете обрабатывать разные дни, как это

@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;

        ...
    }
}

Это должно делать свое дело!

Другие вопросы по тегам