首页 文章

Xamarin android在活动和从其他活动重置之间传递时间

提问于
浏览
0

我是 xamarin android的新手 . 我有一个重置时间的问题我希望将时间传递给 SeeTime 活动,并将该时间的重置时间重置为60,这也将重置 MainActivity 中的时间 .

public class MainActivity : AppCompatActivity
    {
       public EditText timer;
        Button btn;
        public int elapsedTime;    // counting values integer
        Handler myHandler;   // used to delay runnable for a second which delay_RATE
        int delay_RATE = 1000;    //delay
        Java.Lang.Runnable r;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            elapsedTime = 60; // default value
            myHandler = new Handler();     //initializing handler
            r = new Java.Lang.Runnable(Run);
            timer = FindViewById<EditText>(Resource.Id.timertxt);
            btn = FindViewById<Button>(Resource.Id.btn1);
            btn.Click += Btn_Click;
            Counter();
        }

        private void Btn_Click(object sender, System.EventArgs e)
        {
            elapsedTime = 20;
            StartActivity(typeof(SeeTime));
        }

        void Counter()
        {
            elapsedTime--;      // increment
            timer.Text = elapsedTime.ToString();
            myHandler.PostDelayed(r, delay_RATE);
            if (elapsedTime == 0)
            {
                elapsedTime = 20;
            }
        }
        void Run()
        { Counter(); }

SeeTime Activity:

public class SeeTime : Activity
    {
        MainActivity mainActivity;
        private EditText timer;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Time);
            timer = FindViewById<EditText>(Resource.Id.txtTime);
            mainActivity = new MainActivity();

            timer.Text = mainActivity.timer.Text;
            // Create your application here
        }
    }

1 回答

  • 0

    您可以尝试以下方法将 elapsedTimeMainActivity 传递给 SeeTime 活动 .

    //主要活动

    var intent = new Intent(this, typeof(SeeTime));
    intent.PutExtra("Timer", elapsedTime);
    StartActivity(intent);
    

    // SeeTime acticity

    int intValue = Intent.Extras.GetInt("Timer", 20);
    

    此外,当您从 SeeTime 活动返回 MainActivity 时,可以使用 OnResume() 方法将 elapsedTime 重置为60.详细信息:https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/activity-lifecycle/

    所以代码是这样的:

    主要活动

    using Android.App;
    using Android.OS;
    using Android.Support.V7.App;
    using Android.Runtime;
    using Android.Widget;
    using Android.Content;
    
    namespace App80
    {
        [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
        public class MainActivity : AppCompatActivity
        {
            public EditText timer;
            Button btn;
            public int elapsedTime;    // counting values integer
            Handler myHandler;   // used to delay runnable for a second which delay_RATE
            int delay_RATE = 1000;    //delay
            Java.Lang.Runnable r;
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                SetContentView(Resource.Layout.activity_main);
                elapsedTime = 60; // default value
                myHandler = new Handler();     //initializing handler
                r = new Java.Lang.Runnable(Run);
                timer = FindViewById<EditText>(Resource.Id.timertxt);
                btn = FindViewById<Button>(Resource.Id.btn1);
                btn.Click += Btn_Click;
                Counter();
            }
    
            protected override void OnResume()
            {
                base.OnResume();
                elapsedTime = 60;
                timer.Text = elapsedTime.ToString();
            }
    
            private void Btn_Click(object sender, System.EventArgs e)
            {
                var intent = new Intent(this, typeof(SeeTime));
                intent.PutExtra("Timer", elapsedTime);
                StartActivity(intent);
    
            }
    
            void Counter()
            {
                elapsedTime--;      // increment
                timer.Text = elapsedTime.ToString();
                myHandler.PostDelayed(r, delay_RATE);
                if (elapsedTime == 0)
                {
                    elapsedTime = 20;
                }
            }
            void Run()
            { Counter(); }
        }
    }
    

    SeeTime活动:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    
    namespace App80
    {
        [Activity(Label = "SeeTime")]
        public class SeeTime : Activity
        {
            //MainActivity mainActivity;
            private EditText timer;
            protected override void OnCreate(Bundle savedInstanceState)
            {
                base.OnCreate(savedInstanceState);
                SetContentView(Resource.Layout.Time);
                timer = FindViewById<EditText>(Resource.Id.txtTime);
    
                int intValue = Intent.Extras.GetInt("Timer", 20);
    
                timer.Text = intValue.ToString();
    
            }
    
        }
    }
    

相关问题