201

setHasOptionsMenu(true)内部に配置しましたが、内部フラグメントonCreateViewを呼び出すことができません。onCreateOptionsMenu

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}

以下は私のonCreateOptionsMenuコードです。

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}

私が受け取るエラーメッセージ:

タイプFragmentのメソッドonCreateOptionsMenu(Menu)は、スーパータイプメソッドをオーバーライドまたは実装する必要があります。

4

7 に答える 7

541

これを試して、

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

最後に、onCreateViewメソッドでこの行を追加して、オプションをToolbar

setHasOptionsMenu(true);
于 2013-03-27T07:54:35.677 に答える
23

action_settingsを定義する自動生成ファイルres/menu/menu.xmlがすでにあります。

MainActivity.javaには、次のメソッドがあります。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_settings:
            // do stuff, like showing settings fragment
            return true;
    }

    return super.onOptionsItemSelected(item); // important line
}

フラグメント呼び出しのonCreateView()方法では、次のようになります。

setHasOptionsMenu(true); 

また、次の2つのメソッドを追加します。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

最後に、 action_1action_2を定義する新しいファイルres / menu/fragment_menu.xmlを追加します。

このように、アプリがフラグメントを表示すると、メニューには次の3つのエントリが含まれます。

  • res / menu/fragment_menu.xmlからのaction_1
  • res / menu/fragment_menu.xmlからのaction_2
  • res / menu/menu.xmlからのaction_settings
于 2015-07-11T17:50:37.810 に答える
14

@AlexanderFarberと@SinoRajの回答を試しました。どちらの答えも良いですが、何が欠けているのかがわかるまで、フラグメント内でonCreateOptionsMenuを使用できませんでした。

次のように、アクティビティにsetSupportActionBar(toolbar)を追加します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

この回答が同じ問題を抱えている人に役立つことを願っています。

于 2016-05-27T00:18:22.060 に答える
5

電話

setSupportActionBar(toolbar)

中身

onViewCreated(...) 

フラグメントの

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((MainActivity)getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
}
于 2017-12-13T08:26:34.327 に答える
3

Set setHasMenuOptions(true)は、アプリケーションに独自のツールバーなどのアクションバーを備えたテーマがある場合、Theme.MaterialComponents.DayNight.DarkActionBarまたはそれ以外の場合はフラグメント内で呼び出されない場合に機能します。ActivityonCreateOptionsMenu

スタンドアロンを使用する場合はToolbar、アクティビティを取得しToolbar、サポートアクションバーとして設定する必要があります。

(requireActivity() as? MainActivity)?.setSupportActionBar(toolbar)

これにより、フラグメントonCreateOptionsMenuを呼び出すことができます。

他の選択肢は、あなたToolbar自身のメニューをで膨らませtoolbar.inflateMenu(R.menu.YOUR_MENU)、アイテムリスナーをで膨らませることができます

toolbar.setOnMenuItemClickListener {
   // do something
   true
}
于 2020-09-10T18:01:40.567 に答える
1
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_add_customer, container, false);
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}
于 2017-07-19T09:03:04.333 に答える
0

Createメソッドのフラグメント内で、次のように簡単に実行できます。

setHasOptionsMenu(true)

そして今、あなたはオーバーライドすることができます、

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    menu.clear()
}
于 2021-12-02T12:52:16.360 に答える