[英]How do I display a new label text, selected at random, for a 1-day timespan?
背景:我有一個按鈕單擊事件,它觸發文本的解析,該文本是隨機選擇的[200],將以標簽的形式顯示給用戶。
目標:每天顯示直到當天使用為止隨機選擇的新標簽文本,直到使用了每個文本字符串為止。 然后重復。
例:
今天,用戶將看到:COW
明天用戶將看到:PIG
第二天,用戶將看到:BEAR
等200天后:重復
我對這一切仍然很陌生,將不勝感激任何專業知識。 我在下面包含了我的代碼以供參考。 預先感謝您的寶貴時間。
public partial class MainPage : ContentPage
{
string[] DailyAnimal_array;
Random r;
private long TimeSpan;
public MainPage()
{
InitializeComponent();
InitializeArrays();
}
private void InitializeArrays()
{
DailyAnimal_array = new string[200]
{
"COW! \r\n …”,
"SHEEP! \r\n ... ",
"PIG! \r\n … ",
"DOG! \r\n …”,
"CAT! \r\n ... ",
"BEAR! \r\n … ",
//etc. 200 total//
};
}
private async void AllDailyAnimals_Clicked(object sender, EventArgs args)
{
string DailyAnimal_Text = DailyAnimal_array[r.Next(200)];
this.DailyAnimal_Text.Text = DailyAnimal_Text;
AllDailyAnimals.IsEnabled = false;
Intro_Image.IsVisible = false;
AllDailyAnimals.IsVisible = false;
//ADD CODE HERE FOR 1 RANDOM NEW ANIMAL (PER DAY DURATION) UNTIL EACH ANIMAL USED-THEN REPEAT CODE//
}
XAML:
<Label x:Name="DailyAnimal_Text" Margin="10,10" TextColor="Purple"
FontAttributes="Bold" FontSize="Small" BackgroundColor="AliceBlue"
HorizontalTextAlignment="Center"/>
<Button x:Name="AllDailyAnimals" Text="CLICK"
Clicked="AllDailyAnimals_Clicked" Image="Animal_Button.png"
HorizontalOptions="Center" VerticalOptions="EndAndExpand"
WidthRequest="170" HeightRequest="170" TranslationX="100"
TranslationY="100" IsVisible="False"/>
從您的問題來看,您似乎正在尋找的是如何在應用程序中保留數據。
由於您的單詞列表似乎是很難編碼的,因此您可能只需要保存DateTime
值來確定何時選擇了最后一個值以及指向特定項目的index
,就可以擺脫困境。 這樣,如果您的應用被置於后台或被用戶殺死,您仍然會知道何時設置該值,並根據該值確定自從選擇一個值最后一天以來是否過去了一天。
要在iOS上保存簡單的值,您可以在Android SharedPreferences
等上使用NSUserDefaults
。幸運的是,好心人已經在各種插件中為您提取了這些值。 您可能正在尋找的Xam.Plugins.Settings
NuGet可以為您處理所有這些事情。
因此,將該軟件包添加到您的PCL和平台特定項目中,然后可以使用以下方法添加值:
CrossSettings.Current.AddOrUpdateValue("lastTime", DateTime.UtcNow);
並使用以下方法檢索時間:
var lastTime = CrossSettings.Current.GetValueOrDefault("lastTime", DateTime.MinValue);
然后,如果lastTime
為DateTime.MinValue
,則這是用戶首次啟動該應用程序。
CrossSettings.Current.AddOrUpdateValue("lastTime", DateTime.UtcNow);
var index = r.Next(200);
CrossSettings.Current.AddOrUpdateValue("index", index);
然后使用該索引設置文本。
現在,有了這兩個設置,您只需在返回應用程序時就處理該案件。 您可以通過覆蓋頁面上的OnAppearing()
並從設置中獲取lastTime
並檢查DateTime.UtcNow
來簡單地做到這一點:
var lastTime = CrossSettings.Current.GetValueOrDefault("lastTime", DateTime.MinValue);
if (lastTime + TimeSpan.FromDays(1) > DateTime.UtcNow)
{
// grab new value from the array
// save the time
// save the index
// display it
}
在Cheesebaron和上帝的恩典的幫助下,我終於明白了。 首先,如果您將Windows計算機與iPhone上的Xamarin Live播放器配合使用,則需要將Debug(調試)更改為Release(發布),以使Xam.Plugins.Settings正常運行。 我還需要添加一個滴答數。 我在下面粘貼了對我有用的代碼。
公共局部類MainPage:ContentPage {string [] DailyAnimal_array;
Random r;
private long TimeSpan;
public MainPage()
{
InitializeComponent();
InitializeArrays();
}
private void InitializeArrays()
{
DailyAnimal_array = new string[200]
{
"BEAR! \r\n … ",
//etc. 200 total//
};
r = new Random(Environment.TickCount);
r.Next(0);
private async void AllDailyAnimals_Clicked(object sender, EventArgs args)
{
var lastTime=CrossSettings.Current.GetValueOrDefault("lastTime", DateTime.MinValue);
var index = r.Next(0,200);
if ((lastTime + TimeSpan.FromDays(1)) >= DateTime.UtcNow)
{
string DailyAnimal_Text = DailyAnimal_array[index];
this.DailyAnimal_Text.Text = DailyAnimal_Text;
CrossSettings.Current.AddOrUpdateValue("lastTime", DateTime.UtcNow);
CrossSettings.Current.AddOrUpdateValue("index", index);
}
else
{
index = CrossSettings.Current.GetValueOrDefault("index", index);
this.DailyAnimal_Text.Text = DailyAnimal_array[0];
}
AllDailyAnimals.IsEnabled = false;
Intro_Image.IsVisible = false;
AllDailyAnimals.IsVisible = false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.