2016-08-23 2 views
0

Я пытаюсь реализовать представление с текстовым представлением, подсчитывая число каждые 600 миллисекунд и динамически отображая число в текстовом представлении.OnCreate вызывается дважды при использовании CountDownTimer в Android

Проблема: действие вызывается как ожидалось, но во время обратного отсчета активность снова создается и обратный отсчет начинается с начала. Метод 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- to-be-called-multiple-times – Nestoraj

+0

Интересно, как вы смогли создать этот код и запустить его, поскольку вы не реализовали метод OnFinish() CountDownTimer. OnTick() и OnFinish() должны быть реализованы при переопределении класса CountDownTimer. – sJy

+0

@Nestoraj, я прочитал этот пост. Они предлагают отложить поток, на котором работает таймер, но я не могу отложить, потому что я реализую своего рода метроном, это должно быть точным. Я просто попытался запустить свой таймер в отдельном потоке с помощью следующего кода: 'System.Threading.Thread thread = new System.Threading.Thread (новый ThreadStart (runner.StartTimer));' и 'thread.Start();' но результаты те же. После небольшой отладки я обнаружил, что активность воссоздается после запуска таймера. Я не нашел ничего полезного в документации для Android. Я буду продолжать смотреть. – user1743439

ответ

1

Как оказалось, метод, вызываемый дважды, был вызван простой ошибкой в ​​логике кода - я дважды вызывал StartActivity. Так что это не имело никакого отношения к таймеру обратного отсчета. Спасибо за ответы. :)

Смежные вопросы