android - 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)
解决方案
经过一番努力,我找到了答案。我无法将复选框的值存储到单个 int 中。所以我以递增模式更改复选框的值并且它起作用了
推荐阅读
- javascript - 如何遍历数组并将每次迭代写入同一个文件[nodejs]
- objective-c - 在方法中分配实例方差会导致段错误
- git - 将从另一个分支签出的分支变基到 master 上,而不拖动第一个分支的提交
- python - 在python中追加迭代结果
- r - 尝试加载一个文件时 read_excel() 产生错误
- webrtc - Android 上的 Chrome 无法通过 WebRTC 连接到对等点
- python - 为什么我的地理位置不起作用?
- angular - 名称不工作的嵌套路由器插座
- python - 从 Python 脚本登录 Flask Web App
- python - Adaboosting 集成学习