我在Eclipse中为Android 4.4 KitKat开发的项目中遇到了这个复杂的问题。我开发了一个活动,向用户显示三种不同类型的活动,供他选择,即“中型”和“困难”模式测验。我只有一种得分活动,所有三种测验模式都会得出此结果,以计算用户的总得分。区分测验模式的方法是,我在活动的意图内传递了一个字符串变量,在score活动中,我有一个if语句与if(activityString.equals(“ easy”))相匹配,然后计算得出计分系统。问题是,当我完成测验模式中的问题时,得分活动不会位于堆栈顶部,而是堆栈上的上一个活动(测验主菜单活动)位于顶部(弹出测验活动)。
确实很复杂,不确定是否可以提出这样一个复杂的问题,但这是我的代码:
检查之前声明的数组列表中是否存在更多问题的代码片段。使用单选按钮回答答案。在第一个else语句中,计算正确答案,然后移至所需的下一个活动ScoreActivity
QuizActivity.java(测验主菜单)
btnNext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
RadioButton uansw = (RadioButton) findViewById(rg.getCheckedRadioButtonId());
String ansText = uansw.getText().toString();
if (ansText.equalsIgnoreCase(answers[flag]))
{
correct++;
}
else
{
wrong++;
}
//increment flag to show next question
flag++;
if(flag<questions.length)
{
rb1.setChecked(true);
//change question text view to next question
tv.setText(questions[flag]);
//change radio button options to next value of the array
rb1.setText(opt[flag * 3]);
rb2.setText(opt[flag * 3 + 1]);
rb3.setText(opt[flag * 3 + 2]);
}
else
{
//shows negative marks if toggle is on
if(MainQuizActivity.tbflag )
{
marks = correct - wrong;
}
//if toggle is off
else
{
marks = correct;
}
finish();
mCountDownTimer.cancel();
Intent in = new Intent(getApplicationContext(),ScoreActivity.class);
in.putExtra("activity", "easy");
startActivity(in);
}
}
});
这是我的ScoreActivity.java代码片段,与简单模式测验有关,它获取用户输入的分数
if(activityString.equals("easy"))
{
txtViewQuizCompleted.setText("You have successfully completed \nEasy Mode Quiz!");
sb.append("Correct Answers:" + QuizActivity.correct);
sb.append("\nWrong Answers:" + QuizActivity.wrong);
sb.append("\nTime Left:" + timeLeft + "secs");
sb.append("\n\nFinal SCORE: " + finalScore);
//print values to textview
tv.setText(sb);
finish();
}
要求提供太多信息,请尝试使其尽可能简单。 LogCat不显示任何内容,如果需要更多信息,请告诉我
最佳答案
您的代码的问题是发生和位置
finish();
在您的测验活动中,您在创建和启动ScoreActivity活动之前将其称为“完成”,因此将杀死测验活动,并在ScoreActivity甚至有机会打开之前返回上一个活动。
然而实际上,由于某种原因,有时它实际上可以设法在完成杀死自己之前打开ScoreActivity,但是随后您遇到了另一个问题。一旦在ScoreActivity中设置了分数,就再次调用finish(),这将有效地终止该活动。
因此,现在剩下的唯一活动是测验之前的活动,该活动可以返回。