只检查4个CheckBox中的2个

时间:2017-04-10 20:49:46

标签: android checkbox

我有一个测验应用程序,每个问题都有4个答案,其中2个是正确答案。我使用CheckBox作为答案。我想要的是当用户点击2个答案时,然后剩下的2个取消选中。换句话说,当时只有2个CheckBox,如果用户有2个已检查并检查第三个,则检查其中一个以取消选中。我写了一个代码,它是"半工作"。当我检查CheckBox从第一个到最后一个开始工作时,但从最后一个到第一个点击,没有任何反应...

public void checkBoxClicked(View view) {

    switch (view.getId()) {

        case R.id.checkBoxOne:
            case R.id.checkBoxTwo:
                case R.id.checkBoxThree:
                    case R.id.checkBoxFour:
            if (checkBoxOne.isChecked() && checkBoxTwo.isChecked()) {
                checkBoxThree.setEnabled(false);
                checkBoxFour.setEnabled(false);
            }else {
                checkBoxThree.setEnabled(true);
                checkBoxFour.setEnabled(true);
            }
             if (checkBoxOne.isChecked() && checkBoxThree.isChecked()) {
                checkBoxTwo.setEnabled(false);
                checkBoxFour.setEnabled(false);
            }else {
                 checkBoxTwo.setEnabled(true);
                 checkBoxFour.setEnabled(true);
             }
            if (checkBoxOne.isChecked() && checkBoxFour.isChecked()) {
                checkBoxTwo.setEnabled(false);
                checkBoxThree.setEnabled(false);
            }else {
                checkBoxTwo.setEnabled(true);
                checkBoxThree.setEnabled(true);
            }
            if (checkBoxTwo.isChecked() && checkBoxThree.isChecked()) {
                checkBoxOne.setEnabled(false);
                checkBoxFour.setEnabled(false);
            }else {
                checkBoxOne.setEnabled(true);
                checkBoxFour.setEnabled(true);
            }
             if (checkBoxTwo.isChecked() && checkBoxFour.isChecked()) {
                checkBoxOne.setEnabled(false);
                checkBoxThree.setEnabled(false);
            }else {
                 checkBoxOne.setEnabled(true);
                 checkBoxThree.setEnabled(true);
             }
             if (checkBoxThree.isChecked() && checkBoxFour.isChecked()) {
                checkBoxOne.setEnabled(false);
                checkBoxTwo.setEnabled(false);
            }else {
                 checkBoxOne.setEnabled(true);
                 checkBoxTwo.setEnabled(true);
             }
                        break;

1 个答案:

答案 0 :(得分:0)

我会尝试跟踪使用数组检查的方框(队列对此非常有效)。当用户单击复选框时,检查您的阵列是否有两个条目。如果它少于2个条目,请将新复选框添加到列表中。如果它有两个条目,请从列表中删除第一个复选框,然后添加新复选框。

在跟踪代码之后,您只需取消选中所有复选框,然后只检查所需的复选框。

这里我使用ArrayList来简化,但即使是一个简单的数组也可以。您也可以使用id而不是实际视图。

***更新非常简单的工作示例。

活动

public class TestActivity extends AppCompatActivity implements View.OnClickListener{

    private ArrayList<CheckBox> mChecks;
    private ArrayList<CheckBox> mSelectedChecks;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test_layout);

        mChecks = new ArrayList<CheckBox>();
        mSelectedChecks = new ArrayList<CheckBox>();

        //Load All checkboxes
        CheckBox check1 = (CheckBox)findViewById(R.id.check1);
        CheckBox check2 = (CheckBox)findViewById(R.id.check2);
        CheckBox check3 = (CheckBox)findViewById(R.id.check3);
        CheckBox check4 = (CheckBox)findViewById(R.id.check4);

        //Add to tracking list
        mChecks.add(check1);
        mChecks.add(check2);
        mChecks.add(check3);
        mChecks.add(check4);

        //Add Click listener
        for(CheckBox c : mChecks) {
            c.setOnClickListener(this);
        }

    }

    @Override
    public void onClick(View view) {
        CheckBox c = (CheckBox)view;

        if(mSelectedChecks.contains(c)) {
            mSelectedChecks.remove(c);
        } else {
            if(mSelectedChecks.size() < 2) {
                mSelectedChecks.add(c);
            } else {
               mSelectedChecks.remove(0);
               mSelectedChecks.add(c);
            }
        }

        drawResults();
    }

    public void drawResults() {
        for(CheckBox c : mChecks) {
             c.setChecked(mSelectedChecks.contains(c));
        }
    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">


<CheckBox
    android:text="Check 1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/check1"/>

<CheckBox
    android:text="Check 2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/check2"/>

<CheckBox
    android:text="Check 3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/check3"/>

<CheckBox
    android:text="Check 4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/check4"/>

</LinearLayout>