活动弹出而不是在堆栈上添加新的活动

时间:2015-02-09 19:05:16

标签: android android-intent android-activity

我在Eclipse中为Android 4.4 KitKat开发的项目中存在这个复杂的问题。我开发了一个活动,向用户显示三种不同类型的活动供他选择:Easy Medium和Hard模式quizes。我只有一个得分活动,所有三种测验模式都会产生,计算用户的总得分。在quizes模式之间进行区分的方法是我在活动的意图内传递一个字符串变量,并且在得分活动中我有一个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没有显示任何内容,如果需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:2)

您的代码存在问题是

的出现和位置
finish();

在您的测验活动中,您在创建并启动ScoreActivity活动之前调用完成,从而在ScoreActivity甚至有机会打开之前终止测验活动并返回上一个活动。

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

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