2012-09-14 86 views
5

我有一个测验应用程序,其中有一个定时器整个游戏活动在哪里你应该回答尽可能多的问题,你可以在指定的分钟内..完成后仍然继续活动();

分配后的分钟结束后,它会带你到结果活动它显示你的分数。在回按时,我创建了一个警告对话框,询问您是否要返回主菜单。如果点击是,页面应该回到主菜单并停止/杀死游戏活动。

然而,当我点击“是”,就返回到主菜单,但同时你还是任何地方应用,结果仍然会从以前的gameactivity我有显示。也许我说好的真的完成了gameactivity ..这里是我的活动计时器和背压片段:

new CountDownTimer(seconds, 1000) { 
    public void onTick(long millisUntilFinished) { 
      timer.setText("Seconds left: " + millisUntilFinished/1000); 
    } 
    public void onFinish() { 
      Intent intent = new Intent(GameActivityAddition.this, Score.class); 
      intent.putExtra("totalscore", score); 
      intent.putExtra("numberquestions", rowId); 
      intent.putExtra("d", difficulty); 
      db.close(); 
      startActivity(intent); 
    } 
}.start(); 

@Override 
public void onBackPressed() { 
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this); 
    abuilder.setMessage("Return to Main Menu?"); 
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      Intent main = new Intent(GameActivityAddition.this, Main.class); 
      startActivity(main); 
      finish();   
     } 
    }); 
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel();    
     } 
    }); 
    AlertDialog alert = abuilder.create(); 
    alert.show(); 
} 
+1

可能是你已经在你的结果活动设置的数据不被清除,当你玩完活动,令你看到旧的数据,当您再次访问活动。 – Hiral

+0

你不停止倒计时。 – user996428

+0

我猜,只是猜测,倒数计时器就像一个线程,当你调用完成其仍将被运行()。尝试在计时器中添加一个布尔变量来控制其运行。 – Huang

回答

1

没有保证完成()将立即关闭当前的活动(这是Android的高达)。


为了解决你的问题试试这个,


坚持和定时器的参考(您将使用该取消计时器,当用户离开S中的当前活动),

CountDownTimer resultTimer = new CountDownTimer(seconds, 1000) { 
    public void onTick(long millisUntilFinished) { 
      timer.setText("Seconds left: " + millisUntilFinished/1000); 
    } 
    public void onFinish() { 
      Intent intent = new Intent(GameActivityAddition.this, Score.class); 
      intent.putExtra("totalscore", score); 
      intent.putExtra("numberquestions", rowId); 
      intent.putExtra("d", difficulty); 
      db.close(); 
      startActivity(intent); 
    } 
}.start(); 


和onBackPressed() - 取消计时器在setPositiveButton回调,


@Override 
public void onBackPressed() { 
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this); 
    abuilder.setMessage("Return to Main Menu?"); 
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      resultTimer.cancel(); //Stop the timer 
      resultTimer = null; 
      Intent main = new Intent(GameActivityAddition.this, Main.class); 
      startActivity(main); 
      finish();   
     } 
    }); 
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel();    
     } 
    }); 
    AlertDialog alert = abuilder.create(); 
    alert.show(); 
} 
+1

_“有)不能保证完成(将立即(这是Android的高达)关闭当前活动” _ - 这是错误的;当调用finish()时,活动立即结束。什么是未结束的活动所在的过程。因此,在活动期间设置的任何静态数据都将保持设置状态。 –

+0

我不好,我应该提供更多信息。没有保证该活动的onDestroy将被立即调用(即使Activity完全从屏幕上移除)并且保留的内存不仅对应于静态数据。 – 66CLSjY

+0

@ 66CLSjY - 谢谢您的详细解答。绝对解决了它! :) – omi0301

0

整理从子活动家长活动可以通过使用startActivityForResult启动子活动并实现onActivityResult来处理结果来实现由儿童活动返回。例如:从ParentActivity,启动ChildActivity使用startActivityForResult()的结果。然后,设置一个将通知ParentActivity完成的结果。在ChildActivity中调用finish()。当ParentActivity从ChildActivity接收到该结果时,ParentActivity也会自行调用finish()。在那里你可以开始另一项活动。

对于代码,请参阅:http://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/

+0

我在我的应用程序中完全一样,但问题是当按下子Activity上的按钮时,活动暂停,并且父活动及其片段的onResume()完全调用。但是1.活动需要花费太多时间才能完成,而且看起来像是电话被挂起。 2.如果下一次我显示任何对话框,它将不起作用,因为子活动仍然是他们的但不可见....现在,如果我旋转屏幕或去其他一些片段onStop和onDestroy的子活动被称为之后,一切似乎都很正常。 – aProgrammer

1

CountDownTimer的财产,即使你完成了它继续倒计时活动。如果你想停止这一点,把countTimerVar.cancel()当你finish()pressBackButton