onPrepareOptionsMenu未在Fragments中调用

时间:2013-03-27 10:45:03

标签: java android

    @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()

5 个答案:

答案 0 :(得分:20)

在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开。当事件发生并且您想要执行菜单更新时,必须调用invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu()。

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:7)

你需要做两件事。 第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中的片段中。或者在更改片段时在mainActivity中。

答案 3 :(得分: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);
    }
}

答案 4 :(得分:0)

<块引用>

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

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