37

OptionsMenuを使用してアプリケーションを作成しています。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);
}

何を使うべきですか?

4

2 に答える 2

35

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

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

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

于 2012-04-24T18:33:49.323 に答える
3

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

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

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

于 2012-04-24T18:53:45.540 に答える