2016-08-23 184 views
0

我试图用文本视图实现一个视图,每600毫秒计数一个数字,并在文本视图中动态显示数字。在Android中使用CountDownTimer时,OnCreate调用了两次

问题:活动按预期调用,但在倒计时期间,活动会再次创建,倒计时将从头开始。我的活动中的OnCreate()方法被调用两次,尽管它应该被调用一次。我知道可以通过改变屏幕方向和其他配置更改来触发它,但似乎并没有发生在这里。

的OnCreate()在我的活动:

protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
     SetContentView(Resource.Layout.SqueezeLayout); 
     countdownTextView = (TextView)FindViewById(Resource.Id.countdown_text_view); 
     Timer myTimer = new Timer(18000, 600, this); 
     myTimer.Start(); 
    } 

我实现CountDownTimer的:

class Timer : CountDownTimer 
    { 
     public int count = 30; 
     SqueezeActivity squeezeActivity; 

     public Timer(long totaltime, long interval, SqueezeActivity activity) 
           : base(totaltime, interval) 
     { 
      squeezeActivity = activity; 
     } 

     public override void OnTick(long millisUntilFinished) 
     { 
      count--; 
      String countStr = count.ToString(); 
      squeezeActivity.countdownTextView.Text = countStr; 
     } 

     public override void OnFinish() 
     { 
      squeezeActivity.StartActivity(typeof(AnotherActivity)); 
     } 

    } 

我在Xamarin开发初学者所以请原谅:)谢谢。

+0

看看这个,我认为你的问题可能与它有关:http://stackoverflow.com/questions/3588682/is-it-normal-for-the-activity-oncreate-method-被称为多次 – Nestoraj

+0

我不知道你是如何构建这个代码并运行它的,因为你没有实现CountDownTimer的OnFinish()方法。在重写CountDownTimer类时,需要实现OnTick()和OnFinish()。 – sJy

+0

@Nestoraj,我读过那篇文章。他们建议延迟计时器运行的线程,但是我不能延迟,因为我正在实施一种节拍器,它必须是精确的。我试着在一个单独的线程中用下面的代码启动我的计时器:'System.Threading.Thread thread = new System.Threading.Thread(new ThreadStart(runner.StartTimer));'''thread.Start();'但结果是一样的。经过一些调试后,我发现在启动计时器后活动会重新创建。我没有在Android文档中找到任何有用的信息。我会继续寻找。 – user1743439

回答

1

事实证明,调用两次的方法是由代码逻辑中的一个简单错误引起的 - 我曾经两次调用StartActivity。所以它与倒数计时器无关。感谢您的答案。 :)

相关问题