5

Es ist mir gelungen, einen Schalter in der Aktionsleiste zu platzieren (wie in den Wi-Fi-Einstellungen).Wechseln der Switch-Instanz in die ActionBar

Ich habe die folgende mainmenu.xml Datei im/Menü-Ordner:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:id="@+id/item1" 
     android:titleCondensed="Service" 
     android:title="Service" 
     android:actionViewClass="android.widget.Switch" 
     android:showAsAction="always|withText"> 
</item> 

Danach habe ich overrode die onCreateOptionsMenu() Methode in der Aktivität, wie folgt:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mainmenu, menu); 

    // Get widget's instance 
    swtService = (Switch)menu.findItem(R.id.item1).getActionView(); 
    swtService.setOnCheckedChangeListener(this); 

    return super.onCreateOptionsMenu(menu); 
} 

Leider kann ich nicht verstehen, wenn diese Methode aufgerufen wird. Hier ist das Problem: es scheint, dass onCreateOptionsMenu nicht einmal vor onResume() genannt wird, so ein NullPointerException geworfen wird:

@Override 
public void onResume() 
{ 
    super.onResume(); 

    // Synchronize the switch with service's status 
    swtService.setChecked(ServiceHelper.isServiceStarted(this, MySystemService.class.getName())); 
} 

bin ich etwas fehlt? Gibt es eine andere Möglichkeit, eine Ansicht in die Aktionsleiste zu verschieben?

EDIT

Mein Ziel API ist 17, und ich über Niederen nicht. :)

Hier ist ein Schuss von der Anwendung, die so genannte Lifecycle-Methoden zeigt: Lifecycle methods

Dank

Antwort

1

Versuchen Sie folgendes:

@Override 
    public void onPrepareOptionsMenu(Menu menu){ 
     super.onPrepareOptionsMenu(menu); 
     swtService.setChecked(ServiceHelper.isServiceStarted(this, MySystemService.class.getName())); 

    } 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    this.getActivity().invalidateOptionsMenu(); // If you are using fragment 
    invalidateOptionsMenu(); // If you are using activity 
} 
+1

Hey, das wie ein Charme! Vielen Dank! : D – XDnl

Verwandte Themen