Add a switch widget to an ActionBar and respond to a change event

Can I learn how to add a switch widget to an ActionBar and handle a click event or a switch event.

At the moment, I can inflate Switch in ActionBar, but could not respond to the change event. I added below main.xml.

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.MainActivity" > <item android:id="@+id/toggleservice" android:actionViewClass="android.widget.Switch" android:showAsAction="ifRoom" android:title="@string/toggle_service"/> </menu> 

I want to start the service when the user clicks on the switch and changes it. Any help is appreciated.

+6
source share
2 answers

You need to call MenuItem.getActionView , here is an example:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate your Menu getMenuInflater().inflate(R.menu.your_menu, menu); // Get the action view used in your toggleservice item final MenuItem toggleservice = menu.findItem(R.id.toggleservice); final Switch actionView = (Switch) toggleservice.getActionView(); actionView.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // Start or stop your Service } }); return super.onCreateOptionsMenu(menu); } 
+15
source

For those of you who use Xamarin. This is a translated version of adneal's answer:

 private Switch _actionViewSwitch; public override bool OnCreateOptionsMenu(IMenu menu) { MenuInflater.Inflate(Resource.Menu.main_activity_actions, menu); var menuItem = menu.FindItem(Resource.Id.toggleservice); _actionViewSwitch = (Switch) menuItem.ActionView; _actionViewSwitch.CheckedChange += ActionViewOnCheckedChange; return base.OnCreateOptionsMenu(menu); } private void ActionViewOnCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs checkedChangeEventArgs) { // ToDo: stuff that happens when switch gets checked. } 
0
source

All Articles