5

私はなんとかスイッチをアクションバーの中に置くことができました(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は気にしません。:)

これがアプリケーションのショットで、次のライフサイクルメソッドを示しています。 ライフサイクルメソッド

ありがとう

4

1 に答える 1

1

これを試して:

    @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
}
于 2013-03-11T14:09:25.230 に答える