web-dev-qa-db-ja.com

スーパーを呼び出すonCreateOptionsMenu()

OptionsMenでアプリケーションを作成しています。いくつかの例を見つけましたが、super.onCreateOptionMenu()メソッドでonCreateOptionsMenu()を呼び出す場所は人によって異なります。

さまざまな方法のリスト:

@Override // without super
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return super.onCreateOptionsMenu(menu);
}

何を使うべきですか?

36
skywall

それはあなたが何をしたいかによります。最初の例では、メニューを配置し、メニューのみを配置します。 2つ目は、最初のスーパークラスメニューを追加します。最後のものは最初にあなたのメニューを追加します。ただし、メニューには注文フィールドもあり、レンダリング時に考慮されることに注意してください。

すでにメニューがあるアクティビティを拡張しているが、そのメニューを表示したくないが、別のメニューを表示したいとします。その場合、最初のアプローチを使用します。

別の例:メニューのあるアクティビティを拡張していて、別のメニューを追加したい。その場合、2番目または最後のアプローチを使用できます。

34
Cristian

onCreateOptionsMenu()のソースは次のとおりです。

public boolean onCreateOptionsMenu(Menu menu) {
    if (mParent != null) {
        return mParent.onCreateOptionsMenu(menu);
    }
    return true;
}

ここで、mParentは現在のアクティビティの親アクティビティです。アクティビティが拡張する場合Android.app.Activityは、最後にtrueを返すだけで、superの呼び出しについて心配する必要はありません。デフォルトの実装では、親アクティビティに基づいてメニューが表示されますが、おそらく表示されません。欲しいです。

3
Jason Robinson