我设法在操作栏中放置了一个开关(如在 Wi-Fi 设置中)。
我将以下mainmenu.xml文件放在 /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>
之后我覆盖了onCreateOptionsMenu()
活动中的方法,如下:
@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);
}
不幸的是,我无法理解何时调用此方法。这就是问题所在:似乎onCreateOptionsMenu
甚至在之前都没有调用它onResume()
,所以NullPointerException
抛出了 a :
@Override
public void onResume()
{
super.onResume();
// Synchronize the switch with service's status
swtService.setChecked(ServiceHelper.isServiceStarted(this, MySystemService.class.getName()));
}
我错过了什么吗?还有另一种方法可以在操作栏中放置视图吗?
编辑
我的目标 API 是 17,我不关心更低的。:)
这是应用程序的截图,显示了调用的生命周期方法:
谢谢