小游戏在测验结束后没有显示正确的结果-文本视图和按钮问题-Java(android)
Results.java类中showResults()方法的输出工作不正常。该琐事游戏循环了所有10个问题,并显示供用户选择答案。在第10个问题之后,将显示一个结果页面,显示正确答案和错误答案的结果。正确的问题将显示为绿色,错误的问题将显示为红色。问题的颜色没有以正确的颜色显示。此外,变量“correctAnswers”和“ErrorAnswers”在QuestionView类中不会递增。这可以通过Results.java中showResults()的输出看到 我已经在很多地方调试过了,但似乎找不到我把事情搞砸的地方 在此问题上的帮助和代码结构的建议是感激的!提前谢谢你 Results.java小游戏在测验结束后没有显示正确的结果-文本视图和按钮问题-Java(android),java,android,button,textview,Java,Android,Button,Textview,Results.java类中showResults()方法的输出工作不正常。该琐事游戏循环了所有10个问题,并显示供用户选择答案。在第10个问题之后,将显示一个结果页面,显示正确答案和错误答案的结果。正确的问题将显示为绿色,错误的问题将显示为红色。问题的颜色没有以正确的颜色显示。此外,变量“correctAnswers”和“ErrorAnswers”在QuestionView类中不会递增。这可以通过Results.java中showResults()的输出看到 我已经在很多地方调试过了,但似乎找
public class Results extends Activity {
QuestionView qv = new QuestionView();
ArrayList<Question> queryList = qv.getQueries();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.resultsmain);
Button homeBtn = (Button)findViewById(R.id.homeBtn);
Button highscoresBtn = (Button)findViewById(R.id.highscoresBtn);
homeBtn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent1 = new Intent(Results.this, MainMenu.class);
startActivity(intent1);
}
});
highscoresBtn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent2 = new Intent(Results.this, Highscores.class);
startActivity(intent2);
}
});
showResults();
}
public void showResults() {
ArrayList<TextView> tList = new ArrayList<TextView>(10);
TextView header = (TextView)findViewById(R.id.header);
TextView q1 = (TextView)findViewById(R.id.q1);
TextView q2 = (TextView)findViewById(R.id.q2);
TextView q3 = (TextView)findViewById(R.id.q3);
TextView q4 = (TextView)findViewById(R.id.q4);
TextView q5 = (TextView)findViewById(R.id.q5);
TextView q6 = (TextView)findViewById(R.id.q6);
TextView q7 = (TextView)findViewById(R.id.q7);
TextView q8 = (TextView)findViewById(R.id.q8);
TextView q9 = (TextView)findViewById(R.id.q9);
TextView q10 = (TextView)findViewById(R.id.q10);
tList.add(q1);
tList.add(q2);
tList.add(q3);
tList.add(q4);
tList.add(q5);
tList.add(q6);
tList.add(q7);
tList.add(q8);
tList.add(q9);
tList.add(q10);
tList.get(0).setText(queryList.get(0).getQuery());
if(queryList.get(0).getCorrectness() == true) {
tList.get(1).setText("Changed to true");
} else {
tList.get(1).setText("DID NOT Change to true");
}
tList.get(2).setText(Integer.toString(qv.getCorrectAnswers()));
tList.get(3).setText(Integer.toString(qv.getWrongAnswers()));
/* for(int i = 0; i < 10; i++) {
tList.get(i).setText(queryList.get(i).getQuery());
if(queryList.get(i).getCorrectness() == true) {
tList.get(i).setTextColor(Color.GREEN);
} else {
tList.get(i).setTextColor(Color.RED);
}
}*/
}
}
变量“correctAnswers”和“ErrorAnswers”在QuestionView类中不递增。这可以通过Results.java中showResults()的输出看到
一旦你把一个活动放在后台,就不能保证它不会在没有警告的情况下被销毁。您需要通过您意图中的答案计数:
public void endQuiz() {
Intent intent = new Intent(QuestionView.this, Results.class);
intent.putExtras("correct", correctAnswers);
intent.putExtras("wrong", wrongAnswers);
intent.putExtras("queries", queries); // You will need to make Question implement Parcelable
startActivity(intent);
}
然后在结果活动中读取这些值。否则,您将面临丢失此信息并获得默认值3的风险。(简而言之,correctAnswers++
没有任何问题)
此外,您还有许多非常相似/重复的代码。例如,您可以对答案使用一个OnClickListener,只需做一些小改动:
OnClickListener answerClick = new OnClickListener() {
public void onClick(View v) {
int index = (Integer) v.getTag();
if(answer == index) {
correctAnswers++;
queries.get(i).setSelectedAnswer(index);
queries.get(i).setCorrectness(true);
} else {
wrongAnswers++;
queries.get(i).setCorrectness(false);
}
nextQuestion();
}
};
answer1 = (Button)findViewById(R.id.answer1);
answer1.setOnClickListener(answerClick);
answer1.setTag(0);
answer2 = (Button)findViewById(R.id.answer2);
answer2.setOnClickListener(answerClick);
answer2.setTag(1);
//etc
为什么correctAnswers和ErrorAnswers初始化为3?为什么setColor部分被注释掉?为什么要将正确性作为构造函数参数传递?您应该将问题初始化为未回答,而不是使用已设置的正确性值。您应该使用布尔值,而不是布尔值,将null映射为未应答,将非null值映射为实际正确性。。。您知道getRandom10可以多次返回相同的问题吗?接下来,您在活动(问题视图)上调用新操作员不好。。。似乎你不了解oop编程的基础知识(不要提及android编程),所以最好读一些书……他正在结果活动中创建一个QuestionView活动实例,用于从QuestionView活动访问方法是的,这就是我们使用Intents的原因。
public class Question {
String a1;
String a2;
String a3;
String a4;
int correctAnswer;
String query;
int selectedAnswer;
boolean correctness;
public Question() {
}
public Question(String a1, String a2, String a3, String a4, int correctAnswer, String query, int selectedAnswer, boolean correctness) {
this.a1 = a1;
this.a2 = a2;
this.a3 = a3;
this.a4 = a4;
this.correctAnswer = correctAnswer;
this.query = query;
this.selectedAnswer = selectedAnswer;
this.correctness = correctness;
}
public String getA1() { return a1; }
public String getA2() { return a2; }
public String getA3() { return a3; }
public String getA4() { return a4; }
public String getQuery() { return query; }
public int getCorrectAnswer() { return correctAnswer; }
public boolean getCorrectness() { return correctness; }
public void setSelectedAnswer(int newAnswer) {
selectedAnswer = newAnswer;
}
public void setCorrectness(boolean newAnswer) {
correctness = newAnswer;
}
}
public void endQuiz() {
Intent intent = new Intent(QuestionView.this, Results.class);
intent.putExtras("correct", correctAnswers);
intent.putExtras("wrong", wrongAnswers);
intent.putExtras("queries", queries); // You will need to make Question implement Parcelable
startActivity(intent);
}
OnClickListener answerClick = new OnClickListener() {
public void onClick(View v) {
int index = (Integer) v.getTag();
if(answer == index) {
correctAnswers++;
queries.get(i).setSelectedAnswer(index);
queries.get(i).setCorrectness(true);
} else {
wrongAnswers++;
queries.get(i).setCorrectness(false);
}
nextQuestion();
}
};
answer1 = (Button)findViewById(R.id.answer1);
answer1.setOnClickListener(answerClick);
answer1.setTag(0);
answer2 = (Button)findViewById(R.id.answer2);
answer2.setOnClickListener(answerClick);
answer2.setTag(1);
//etc