我目前正在做一个同时具有复选框和广播组的测验。选中复选框后,分数会制表以产生最终分数,但是当我随后选择单选按钮时,分数将无法正确制表。
我的分数存储在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)
答案 0 :(得分:0)
经过艰苦的努力,我找到了答案。我无法将复选框的值存储到单个int中。因此,我以递增的方式更改了复选框的值,并且有效