我有以下代码行。我需要检查每个按钮(有4个:a,b,c,d)并比较答案是否正确。如果是,我说该按钮将其颜色设置为绿色。
但我需要使用迭代器或类似的东西来减少这些代码,因为如果增加按钮的数量会更复杂。
if(currentQuestion.getOptA().equals(currentQuestion.getAnswer()))
{
buttonA.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.lightGreen));
} else if(currentQuestion.getOptB().equals(currentQuestion.getAnswer()))
{
buttonB.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.lightGreen));
} else if(currentQuestion.getOptC().equals(currentQuestion.getAnswer()))
{
buttonC.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.lightGreen));
} else if(currentQuestion.getOptD().equals(currentQuestion.getAnswer()))
{
buttonD.setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.lightGreen));
}
答案 0 :(得分:2)
一般的想法是:
1)获取按钮的count
2)制作array
并放入要检查的var的动态部分内,例如a,b,c,d
3)使用for
来迭代from 0 to count of buttons
4)每次通过连接名称的静态部分加上数组的动态部分来比较名称,例如getOpt是静态的,a,b c,d是名称的动态部分
所以,这个"技术"只需向array
a,b,c,d
添加新值,您就可以毫不费力地扩展支票。
答案 1 :(得分:1)
Object possibleAnswers [] = {currentQuestion.getOptA(), currentQuestion.getOptB(), currentQuestion.getOptC(), currentQuestion.getOptD()};
Button buttons [] = {buttonA, buttonB, buttonC, buttonD};
for (int i = 0; i < possibleAnswers.lenght; i++) {
if (currentQuestion.getAnswer().equals(possibleAnswers[i]) {
buttons[i].setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.lightGreen));
break;
}
}
您还可以在Question类中创建一个方法来返回选择数组......类似于:
public Object [] getPossibleAnswers() {
return new Object[] {currentQuestion.getOptA(), currentQuestion.getOptB(), currentQuestion.getOptC(), currentQuestion.getOptD()};
}
然后,
Object possibleAnswers [] = currentQuestion.getPossibleAnswers();
注意强>
我使用了Object
,因为我不知道你班级的名字。
答案 2 :(得分:0)
由于您似乎正在检查一件事并设置另一件事(彼此对应),您应该选择HashMap
。
然后,您将迭代地图(存储键和值组合),如果键与正确答案匹配,则使用该值设置背景颜色。
public HashMap<String, JButton> getQuestionAndAnswers() {
HashMap<String, JButton> result = new HashMap<>();
result.put(currentQuestion.getOptA(), buttonA);
....
}
然后你可以像这样使用它:
HashMap<String, JButton> qaa = getQuestionAndAnswers();
foreach(String key in qaa) {
if(key.equals(currentQuestion.getAnswer()) { qaa.get(key).setBackgroundColor(ContextCompat.getColor(getApplicationContext(),R.color.lightGreen));
break;
}
}
答案 3 :(得分:0)
为了确保以下方式,我建议您使用RadioGroup
并为每个radioButton
使用一个选择器,并为其设置未经检查和检查的状态。
你最像这样创建一个可绘制的形状:
<item android:state_checked="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/lightGreen"
/>
<corners android:radius="2dp" />
</shape>
</item>
<item android:state_checked="false">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/yourOffColor"
/>
</shape>
</item>
并在java中使用这个,当真正设置她的按钮时,如下所示: :
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
int radioID = rg.getCheckedRadioButtonId();
int ansID= 2; //replace your id
radioBtn = (RadioButton) findViewById(radioID);
if (radioID == ansID){
radioBtn.setChecked(true);
}}
});
这是我在我的应用中使用的一种方式,可能对你有用