Udało mi się umieścić przełącznik na pasku akcji (jak w ustawieniach Wi-Fi).Uzyskiwanie instancji przełącznika wewnątrz ActionBar
umieścić następującą mainmenu.xml plik w folderze/menu:
<?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>
Potem overrode Sposób działania onCreateOptionsMenu()
, co następuje:
@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);
}
Niestety, nie mogę zrozumieć, kiedy ta metoda jest wywoływana. Oto problem: wydaje się, że onCreateOptionsMenu
nie nazywa się nawet przed onResume()
, więc NullPointerException
jest wyrzucany:
@Override
public void onResume()
{
super.onResume();
// Synchronize the switch with service's status
swtService.setChecked(ServiceHelper.isServiceStarted(this, MySystemService.class.getName()));
}
Am I czegoś brakuje? Czy istnieje inny sposób umieszczenia widoku na pasku akcji?
EDIT
Moim celem API jest 17, a ja nie dbam o niższych. :)
Oto strzał wniosku, pokazując metody cyklu życia zwane:
Dzięki
Hey, który pracował jak urok! Dziękuję Ci! :RE – XDnl