简体   繁体   中英

Save the state of button in Xamarin Android

I'm disabling buttons once they are pressed. I want it to activate automatically the next day at 12AM. I really have no idea how to do this. Somehow I tried and written the code below.

The code disables the buttons after a click. But it is looses his state once the app is closed. Please help me how can I do this?

public class MainActivity : Activity
    {


        Button button1;
        Button button2;



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

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            mybroadcast myrec = new mybroadcast ();
            Database sqldb1 = ((GlobalClass)this.Application).sqldb;//This will contain "Hello World"
            string stringFromApplicationClass = ((GlobalClass)this.Application).myString;//This will contain "Hello World"
            var now = DateTime.Now;
            string dataFormatada = string.Format("{0:00}/{1:00}/{2:0000}", now.Month, now.Day, now.Year);
            string currentTime = (string.Format ("Current Time: {0}", now.Hour));
            // Get our button from the layout resource,
            // and attach an event to it
            button1 = FindViewById<Button> (Resource.Id.Button1);
            button2 = FindViewById<Button> (Resource.Id.Button2);


            button1.Click += delegate {
                sqldb1.AddRecord (1);

            };


            button2.Click += delegate {

                sqldb1.AddRecord (0);
            };
        }


        public void start()
        {
            Intent myIntent = new Intent (this,typeof( mybroadcast)); 

            AlarmManager alarmMgr = (AlarmManager) this.GetSystemService(Context.AlarmService);
            PendingIntent pendingIntent = PendingIntent.GetService(this, 0, myIntent, 0);
            Calendar calendar =  Calendar.GetInstance (Java.Util.TimeZone.Default);

            calendar.Set(CalendarField.HourOfDay, 12);
            calendar.Set(CalendarField.Millisecond, 00);
            calendar.Set(CalendarField.Second, 00);
            alarmMgr.SetRepeating(AlarmType.Rtc,0, 10, pendingIntent); //Repeat every 24 hours

        }



        public class mybroadcast:BroadcastReceiver
        {
            public override void OnReceive(Context context, Intent myIntent)
            {
                ((MainActivity)context).enablebutton();
            }
        }
        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            base.OnCreateOptionsMenu (menu);

            MenuInflater inflater = this.MenuInflater;

            inflater.Inflate (Resource.Menu.items, menu);

            return base.OnCreateOptionsMenu(menu);
        }

        public override bool OnOptionsItemSelected (IMenuItem item)
        {
            base.OnOptionsItemSelected (item);

            switch (item.ItemId)
            {
            case Resource.Id.week:
                StartActivity(typeof(SecondActivity));
                break;
            case Resource.Id.month:
                {
                    StartActivity(typeof(ThirdActivity));
                    break;
                }
            default:
                break;
            }

            return true;

        }



        public void disablebutton()
        {

            button1.Enabled = false;
            button2.Enabled = false;
        }


        public void enablebutton()
        {

            button1.Enabled = true;
            button2.Enabled = true;
        }
        }

Even though this code is in java, the concept will be the same. Once the alarm goes off, the Broadcastreceiver's onReceive is called, where you can edit the sharedpreference to enable/disable views. If you don't know about sharedpreferences, see these links: How do I use SharedPreferences in Xamarin.Android? , SharedPreferences Example in Xamarin Android

BroadCastReceiver:

public class ReminderActivity extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    //Use sharepreference and set the button state disabled or enabled.
    SharedPreferences mSharedPreferences = getSharedPreferences("MyPref", 0);
    mSharedPreferences..edit().putBoolean("btn_enable", true).commit();

}
}

So once you open the app, check for sharedpreference value and enable or disable the button state accordingly. Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM