簡體   English   中英

如何顯示為期1天的隨機選擇的新標簽文本?

[英]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);

然后,如果lastTimeDateTime.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM