我正在尝试制作一个倒数计时器,显示特定日期剩余的天数,小时数,分钟数和秒数。
这就是我现在所创造的。
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
txtDays = FindViewById<TextView> (Resource.Id.txtDays);
txtHours = FindViewById<TextView> (Resource.Id.txtHours);
txtMins = FindViewById<TextView> (Resource.Id.txtMins);
txtSec = FindViewById<TextView> (Resource.Id.txtSec);
DateTime enteredDate = new DateTime(2013, 7, 25, 12 ,30 ,00);
DateTime todaysDateTime = DateTime.Now;
DateTime formattedDate = todaysDateTime.AddHours (2);
TimeSpan span = enteredDate.Subtract(formattedDate);
double totalDays = span.TotalDays;
double totalHours = span.TotalHours;
double totalMins = span.TotalMinutes;
double totalSec = span.TotalSeconds;
new Thread(new ThreadStart(() =>
{
RunOnUiThread(() =>
{
Console.WriteLine ("Days: " + String.Format("{0:0}", Math.Truncate(totalDays)));
Console.WriteLine ("Hours: " + String.Format("{0:0}", Math.Truncate(totalHours)));
Console.WriteLine ("Minutes: " + String.Format("{0:0}", Math.Truncate(totalMins)));
Console.WriteLine ("Seconds: " + String.Format("{0:0}", Math.Truncate(totalSec)));
txtDays.Text = String.Format ("{0:0}", Math.Truncate (totalDays));
txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
txtMins.Text = String.Format ("{0:0}", Math.Truncate (totalMins));
txtSec.Text = String.Format ("{0:0}", Math.Truncate (totalSec));
});
})).Start();
}
如何使用Android C#每秒自动更新TextView?
编辑2:
我使用过Timer,它使用的是Console.WriteLine,但TextViews没有显示任何内容,也没有更新...有人知道如何每秒更新TextViews?
timer = 0;
new Thread(new ThreadStart(() =>
{
Thread.Sleep (1000);
RunOnUiThread(() =>
{
tmr.Elapsed += new System.Timers.ElapsedEventHandler(tmr_Elapsed);
tmr.Start();
while (timer < totalSec) ;
tmr.Stop();
});
})).Start();
void tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
txtDays = FindViewById<TextView> (Resource.Id.txtDays);
txtHours = FindViewById<TextView> (Resource.Id.txtHours);
txtMins = FindViewById<TextView> (Resource.Id.txtMins);
txtSec = FindViewById<TextView> (Resource.Id.txtSec);
DateTime enteredDate = new DateTime(2013, 7, 25, 12 ,30 ,00);
DateTime todaysDateTime = DateTime.Now;
DateTime formattedDate = todaysDateTime.AddHours (2);
TimeSpan span = enteredDate.Subtract(formattedDate);
totalDays = span.TotalDays;
totalHours = span.TotalHours;
totalMins = span.TotalMinutes;
totalSec = span.TotalSeconds;
Console.WriteLine ("Days: " + String.Format("{0:0}", Math.Truncate(totalDays)));
Console.WriteLine ("Hours: " + String.Format("{0:0}", Math.Truncate(totalHours)));
Console.WriteLine ("Minutes: " + String.Format("{0:0}", Math.Truncate(totalMins)));
Console.WriteLine ("Seconds: " + String.Format("{0:0}", Math.Truncate(totalSec)));
txtDays.Text = String.Format ("{0:0}", Math.Truncate (totalDays));
txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
txtMins.Text = String.Format ("{0:0}", Math.Truncate (totalMins));
txtSec.Text = String.Format ("{0:0}", Math.Truncate (totalSec));
}
答案 0 :(得分:1)
在C#中使用Timer
类并将其设置为1秒。
答案 1 :(得分:0)
问题解决刚刚在tmr_Elapsed
中添加了RunOnUiThreadvoid tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
RunOnUiThread(() =>
{
txtDays = FindViewById<TextView> (Resource.Id.txtDays);
txtHours = FindViewById<TextView> (Resource.Id.txtHours);
txtMins = FindViewById<TextView> (Resource.Id.txtMins);
txtSec = FindViewById<TextView> (Resource.Id.txtSec);
DateTime enteredDate = new DateTime(2013, 7, 25, 12 ,30 ,00);
DateTime todaysDateTime = DateTime.Now;
DateTime formattedDate = todaysDateTime.AddHours (2);
TimeSpan span = enteredDate.Subtract(formattedDate);
totalDays = span.TotalDays;
totalHours = span.TotalHours;
totalMins = span.TotalMinutes;
totalSec = span.TotalSeconds;
Console.WriteLine ("Days: " + String.Format("{0:0}", Math.Truncate(totalDays)));
Console.WriteLine ("Hours: " + String.Format("{0:0}", Math.Truncate(totalHours)));
Console.WriteLine ("Minutes: " + String.Format("{0:0}", Math.Truncate(totalMins)));
Console.WriteLine ("Seconds: " + String.Format("{0:0}", Math.Truncate(totalSec)));
txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
txtHours.Text = String.Format ("{0:0}", Math.Truncate (totalHours));
txtMins.Text = String.Format ("{0:0}", Math.Truncate (totalMins));
txtSec.Text = String.Format ("{0:0}", Math.Truncate (totalSec));
});
}