首页 > 解决方案 > Checkboxes 和 RadioGroups 的分数不在测验中列出

问题描述

我目前正在做一个包含复选框和无线电组的测验。选中复选框后,分数会以表格形式生成最终分数,但是当我在此之后继续选择单选按钮时,分数无法正确制表。

我的分数存储在 Values.java 中

public class Values {

private static Values instance;
private int QUESTIONS_COUNT = 15;
private int[] scores = new int[QUESTIONS_COUNT];

private Values(){

}


public static Values getInstance(){
    if(instance == null){
        instance = new Values();
    }
    return instance;
}

public int updateScore(int checkedId) {
    switch(checkedId){
 case R.id.checkBoxQ7Ma:
            scores[6] = 8;
            break;
        case R.id.checkBoxQ7Mb:
            scores[6] = 0;
            break;
        case R.id.checkBoxQ7Mc:
            scores[6] = 6;
            break;
        case R.id.checkBoxQ7Md:
            scores[6] = 6;
            break;
        case R.id.checkBoxQ7Me:
            scores[6] = 10;
            break;
        case R.id.checkBoxQ7Mf:
            scores[6] = 10;
            break;


        //Q8 for male

        case R.id.radioButtonQ8Ma:
            scores[7] = -5;
            break;
        case R.id.radioButtonQ8Mb:
            scores[7] = (-5);
            break;
        case R.id.radioButtonQ8Mc:
            scores[7] = 10;
            break;
        case R.id.radioButtonQ8Md:
            scores[7] = 10;
            break;

  }

    int finalScore = 0;
    for(int score :  scores){
        finalScore += score;
    }
    return finalScore;
}
}

这是我使用无线电组和复选框的活动。

private CheckBox CB1;
private CheckBox CB2;
private CheckBox CB3;
private CheckBox CB4;
private CheckBox CB5;
private CheckBox CB6;
private RadioGroup radioGroup8;
public TextView tv;
int score;



@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup containermale, @Nullable final Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragmentmale3_layout, containermale,false);
    tv = (TextView)view.findViewById(R.id.textView4);
    CB1 = (CheckBox)view.findViewById(R.id.checkBoxQ7Ma);
    CB2 = (CheckBox)view.findViewById(R.id.checkBoxQ7Mb);
    CB3 = (CheckBox)view.findViewById(R.id.checkBoxQ7Mc);
    CB4 = (CheckBox)view.findViewById(R.id.checkBoxQ7Md);
    CB5 = (CheckBox)view.findViewById(R.id.checkBoxQ7Me);
    CB6 = (CheckBox)view.findViewById(R.id.checkBoxQ7Mf);
    btnFragMale3 = (Button)view.findViewById(R.id.buttonMale3);
    radioGroup8 = (RadioGroup)view.findViewById(R.id.radioGroupQ8M);

    radioGroup8.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, @IdRes int d) {
            int finalScore = Values.getInstance().updateScore(d);
            tv.setText(" " + finalScore);
        }
    });


    CB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(R.id.checkBoxQ7Ma);
            if(CB1.isChecked()){
                score = score + finalScore;
                tv.setText(" " + score);
            } else if (!CB1.isChecked()){
                score = score - finalScore;
                tv.setText(" " +score);
            }
        }
    });

    CB2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(R.id.checkBoxQ7Mb);
            if(CB2.isChecked()){
                score = score + finalScore;
                tv.setText(" " + score);
            } else if(!CB2.isChecked()){
                score = score - finalScore;
                tv.setText(" " +score);
            }
        }
    });


    CB3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(R.id.checkBoxQ7Mc);
            if(CB3.isChecked()){
                score = score + finalScore;
                tv.setText(" " + score);
            } else if(!CB3.isChecked()){
                score = score - finalScore;
                tv.setText(" " +score);
            }
        }
    });


    CB4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(R.id.checkBoxQ7Md);
            if(CB4.isChecked()){
                score = score + finalScore;
                tv.setText(" " + score);
            } else if(!CB4.isChecked()){
                score = score - finalScore;
                tv.setText(" " +score);
            }
        }
    });


    CB5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(R.id.checkBoxQ7Me);
            if(CB5.isChecked()){
                score = score + finalScore;
                tv.setText(" " + score);
            } else if (!CB5.isChecked()) {
                score = score - finalScore;
                tv.setText(" " +score);
            }
        }
    });

    CB6.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(R.id.checkBoxQ7Mf);
            if(CB6.isChecked()){
                score = score + finalScore;
                tv.setText(" " + score);
            } else if(!CB6.isChecked()){
                score = score - finalScore;
                tv.setText(" " +score);
            }
        }
    });






    btnFragMale3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ((MainActivityMale)getActivity()).setViewPager(3);            }
    });


    return view;
}



}

有人请帮助我,以便复选框和无线电组正确制作表格。目前,例如,如果我选中所有复选框,总分是 40,但是当我继续单击 radioButton8Ma 时,分数会立即下降到 5 而不是 35 (40-5)

标签: android

解决方案


经过一番努力,我找到了答案。我无法将复选框的值存储到单个 int 中。所以我以递增模式更改复选框的值并且它起作用了


推荐阅读