5

Sono riuscito a inserire uno Switch all'interno della barra delle azioni (come nelle impostazioni Wi-Fi).Ottenere l'istanza di Switch all'interno di ActionBar

ho messo il seguente file dimainmenu.xml all'interno della cartella/menù:

<?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> 

Dopo di che ho calpestato il metodo onCreateOptionsMenu() nell'attività, come segue:

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

Sfortunatamente, non riesco a capire quando viene chiamato questo metodo. Ecco il problema: sembra che onCreateOptionsMenu non si chiama anche prima onResume(), quindi un NullPointerException è gettato:

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

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

mi sto perdendo qualcosa? C'è un altro modo per mettere una vista all'interno della barra delle azioni?

EDIT

mio obiettivo API è 17, e non mi importa di quelle più basse. :)

Ecco un colpo di applicazione, che mostra i metodi del ciclo di vita chiamate: Lifecycle methods

Grazie

risposta

1

Prova questo:

@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

Ehi, che ha funzionato come un fascino! Grazie! : D – XDnl

Problemi correlati