2015-02-09 54 views
1

我有一个项目,我正在开发的Eclipse的Android 4.4 KitKat这个复杂的问题。我开发了一项活动,向用户显示三种不同类型的活动供他选择:简易中和硬模式测验。我只有一种评分活动,即所有三种评估模式的结果,计算用户的总分。在测试模式之间进行区分的方式是我在活动的意图内传递一个字符串变量,并且在分数活动中,我有一个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中不显示任何东西,如果要求提供更多信息,请让我知道

+0

我不知道我理解你的问题。你是说ScoreActivity没有显示出来吗? – Olumide 2015-02-09 19:10:04

回答

2

与您的代码的问题是发生和的

finish(); 

在您的竞猜活动地点调用完成,再创建和启动ScoreActivity活动,因此在ScoreActivity甚至有机会打开之前杀掉了Quiz活动并回到之前的活动。

实际上,由于某种原因,有时它可能实际上设法在ScoreActivity完成自杀之前打开ScoreActivity,但是随后遇到另一个问题;只要您在ScoreActivity中设置了分数,您就再次调用finish(),这会有效地杀死该活动。

所以现在唯一剩下的活动就是测验之前的活动,它可以回溯到。