24
    @Override
    public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){
        Log.d("Does", "get called");
        inflater.inflate(R.menu.menuItem, menu);
        super.onCreateOptionsMenu(menu,inflater);
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        getActivity().invalidateOptionsMenu();
        MenuItem filter = menu.findItem(R.id.section);

        filter.setVisible(false);

    }

我正在尝试将我的菜单加载到片段中并加载它,但是onPrepareOptionsMenu根本没有被调用,我需要隐藏一些菜单项。

更新:

    @Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setHasOptionsMenu(true);
}

setHasOptionsMenu(true)在我的onCreate()方法中调用。

4

5 回答 5

22

在 Android 3.0 及更高版本上,当菜单项出现在操作栏中时,选项菜单被认为始终处于打开状态。当事件发生并且您想要执行菜单更新时,您必须调用 invalidateOptionsMenu() 来请求系统调用 onPrepareOptionsMenu()。

http://developer.android.com/guide/topics/ui/menus.html

要更改特定项目使用:menu.findItem(R.id.your_item_id)

于 2013-08-10T05:31:25.263 回答
15

你需要做两件事。第 1 步:在 Fragment OnCreateView 添加 setHasOptionsMenu(true);

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    setHasOptionsMenu(true);
    return inflater.inflate(R.layout.fragment_user_settings, container, false);
}

第2步:你需要添加getActivity().invalidateOptionsMenu(); 在 OnViewCreated 的片段中。或者在您更改 Fragment 时在 mainActivity 中。

于 2016-08-22T07:13:51.077 回答
9

可能为时已晚,但我遇到了同样的问题,解决方案非常简单。只需从您的片段中调用 getActivity().invalidateOptionsMenu() 即可。这将调用 onPrepareOptionsMenu ,在这里您可以像这样控制项目的可见性:menu.findItem(R.id.youritem).setVisible(true/false); 希望有帮助!

于 2015-06-25T08:41:43.387 回答
0

您必须通知系统您的应用栏片段正在参与选项菜单的填充。为此,请在片段的 onCreate(Bundle)方法中调用 setHasOptionsMenu(true)

参考。https://developer.android.com/guide/fragments/appbar#activity-register

于 2021-06-17T10:31:49.233 回答
0

这对我有用。

public class ContentFragment extends android.support.v4.app.Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.content_frame,container,false);
        setHasOptionsMenu(true);
        return v;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.note_menu,menu);
        super.onCreateOptionsMenu(menu, inflater);
    }
}
于 2016-06-20T09:20:59.820 回答