且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

保存按钮在Xamarin的Andr​​oid状态

更新时间:2023-02-02 19:26:27

尽管这code是在Java中,这个概念是相同的。一旦警报响起,该的BroadcastReceiver的的onReceive叫,在​​那里你可以编辑的共享preference启用/禁用的观点。如果你不知道的共享preferences,请参见以下链接:How我在Xamarin.Android使用共享preferences?,的共享preferences例Xamarin的Andr​​oid

BroadcastReceiver的:

 公共类ReminderActivity扩展的BroadcastReceiver {
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
    //使用共享preference,设置禁用或启用按钮状态。
    共享preferences mShared preferences = getShared preferences(我的preF,0);
    。mShared preferences..edit()putBoolean(btn_enable,真).commit();

}
}
 

所以一旦你打开应用程序,检查共享preference值,并启用或禁用按钮状态相应。 希望这有助于。

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.