私はなんとかスイッチをアクションバーの中に置くことができました(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()
あるため、aNullPointerException
がスローされます。
@Override
public void onResume()
{
super.onResume();
// Synchronize the switch with service's status
swtService.setChecked(ServiceHelper.isServiceStarted(this, MySystemService.class.getName()));
}
私は何かが足りないのですか?アクションバー内にビューを配置する別の方法はありますか?
編集
私のターゲットAPIは17で、それより低いAPIは気にしません。:)
これがアプリケーションのショットで、次のライフサイクルメソッドを示しています。
ありがとう