2014-04-07 9 views
6

Czy mogę wiedzieć, jak dodać widżet Przełączanie w pasku akcji i obsłużyć zdarzenie kliknięcia lub włączyć zmianę zdarzenia.Dodaj Przełącz widżet do ActionBar i odpowiedz na zmianę zdarzenia

Na razie mogę nadmuchać przełącznik w ActionBar, ale nie mogę odpowiedzieć na zdarzenie zmiany. Dodałem poniżej do pliku 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> 

Chcę rozpocząć usługę, gdy użytkownik kliknie przełącznik i zmieni jego stan. Każda pomoc jest wysoko ceniona.

Odpowiedz

15

Trzeba zadzwonić MenuItem.getActionView, oto przykład:

@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); 
} 
+1

Niesamowite, przeszukane wszędzie, ale nie mogłem znaleźć żadnego rozwiązania. Właśnie uratowałeś mój dzień. Wielkie dzięki :) –

+1

To samo tutaj, gdzie to znalazłeś? każda książka lub zalecany wykład? – dinigo

+0

@ demil133 [Tylko dokumenty] (https://developer.android.com/reference/android/view/MenuItem.html#getActionView%28%29) – adneal

0

Dla tych z Was, używając Xamarin. To jest przetłumaczona wersja odpowiedzi adneala:

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. 
} 
Powiązane problemy