【问题标题】:Displaying the converted time from milliseconds in textview在 textview 中显示从毫秒开始的转换时间
【发布时间】:2014-04-18 22:59:22
【问题描述】:

我正在制作一个计时器应用程序。根据我现在的情况,用户可以从微调器中进行选择:小时、分钟和秒。我有一个公式可以将选定的总时间转换为计时器的毫秒数。此外,时间应转换为字符串并显示。问题是什么都没有显示。 TextView 倒计时应以小时、分钟和秒为单位显示时间。

using System;
using System.Timers;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace QuickTimer
{
    [Activity(Label = "QuickTimer", MainLauncher = true, Icon = "@drawable/icon")]
    public class Activity1 : Activity
    {
        private TimeSpan _ts;
        private Timer _timer = new Timer();
        private int _counter;
        private string _time;
        private int _convertHours;
        private int _convertMinutes;
        private int _convertSeconds;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            Button buttonSet = FindViewById<Button>(Resource.Id.setButton);
            buttonSet.Click += setButton_Click;

            Spinner spinnerHours = FindViewById<Spinner>(Resource.Id.spinnerHours);

            spinnerHours.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinnerHours_ItemSelected);
            var adapterHours = ArrayAdapter.CreateFromResource(
                this, Resource.Array.hoursArray, Android.Resource.Layout.SimpleSpinnerItem);

            adapterHours.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            spinnerHours.Adapter = adapterHours;

            Spinner spinnerMinutes = FindViewById<Spinner>(Resource.Id.spinnerMinutes);

            spinnerMinutes.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinnerMinutes_ItemSelected);
            var adapterMinutes = ArrayAdapter.CreateFromResource(
                this, Resource.Array.minutesArray, Android.Resource.Layout.SimpleSpinnerItem);

            adapterMinutes.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            spinnerMinutes.Adapter = adapterMinutes;

            Spinner spinnerSeconds = FindViewById<Spinner>(Resource.Id.spinnerSeconds);

            spinnerSeconds.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinnerSeconds_ItemSelected);
            var adapterSeconds = ArrayAdapter.CreateFromResource(
                this, Resource.Array.secondsArray, Android.Resource.Layout.SimpleSpinnerItem);

            adapterSeconds.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            spinnerSeconds.Adapter = adapterSeconds;

            _timer.Interval = 1000;
            _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            _timer.Enabled = true;
        }

        private void setButton_Click(object sender, EventArgs e)
        {
            TextView countdown = (TextView)FindViewById(Resource.Id.countdown);
            countdown.Text = getTime();
        }

        public string getTime()
        {
            return _time;
        }

        private void OnTimedEvent(object sender, ElapsedEventArgs e)
        {
            _counter = (getConvertedTime()/1000);
            Console.WriteLine(getConvertedTime());
            for (int i = 0; i <= 5/*(getConvertedTime()/1000)*/; i++)
            {
                _ts = TimeSpan.FromSeconds(_counter);
                string _time = string.Format("{0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms",
                    _ts.Hours,
                    _ts.Minutes,
                    _ts.Seconds,
                    _ts.Milliseconds);
                Console.WriteLine(_time);
                _counter--;
            }

            if (_counter == 0)
            {
                _timer.Enabled = false;
            }
        }

        public int getConvertedTime()
        {
            int convertedTime = _convertHours + _convertMinutes + _convertSeconds;
            return convertedTime;
        }

        private void spinnerHours_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            Spinner spinnerHours = (Spinner)sender;

            int hours = Int32.Parse(spinnerHours.SelectedItem.ToString());
            _convertHours = hours * 1000 * 3600;

            string toast = string.Format("", spinnerHours.GetItemAtPosition(e.Position));
            Toast.MakeText(this, toast, ToastLength.Long).Show();
        }

        private void spinnerMinutes_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            Spinner spinnerMinutes = (Spinner)sender;

            int minutes = Int32.Parse(spinnerMinutes.SelectedItem.ToString());
            _convertMinutes = minutes * 1000 * 60;

            string toast = string.Format("", spinnerMinutes.GetItemAtPosition(e.Position));
            Toast.MakeText(this, toast, ToastLength.Long).Show();
        }

        private void spinnerSeconds_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            Spinner spinnerSeconds = (Spinner)sender;

            int seconds = Int32.Parse(spinnerSeconds.SelectedItem.ToString());
            _convertSeconds = seconds * 1000;

            string toast = string.Format("", spinnerSeconds.GetItemAtPosition(e.Position));
            Toast.MakeText(this, toast, ToastLength.Long).Show();
        }
    }
}

【问题讨论】:

  • 是setButtonClick应该显示什么时间?你在哪里打电话?
  • 从这里 buttonSet.Click += setButton_Click;如果你一直滚动到顶部是在 SetContentView 下
  • 这段代码是什么?它看起来像是 Android 和 C# 的结合体。

标签: c# android visual-studio


【解决方案1】:

我必须添加一个 RunOnUiThread 调用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2017-04-25
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多