android - 在某些 fragment 中隐藏 MenuItem

标签 android android-fragments android-optionsmenu

我使用具有更多 Fragment 的菜单抽屉。在某些 Fragment 中,我有菜单项 REFRESH,但在某些 fragment 中,我想隐藏此菜单项(我不想显示菜单,但我不想隐藏 ActionBar) .

我尝试将覆盖 onCreateOptionsMenu() 添加到 Fragment 我不想显示此菜单项但无法使其工作的地方。我尝试了很多方法来查看代码中的注释行。知道问题出在哪里吗?最后,当我在 MainActivity 中调用 onPrepareOptionsMenu() 时,当我激活菜单抽屉时,这个菜单项会隐藏,但是当我在 Fragment 中时我需要这样做。

Fragment 我想在其中隐藏菜单项 REFRESH:

 public class FindPeopleFragment extends Fragment {
    public FindPeopleFragment(){}

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

    private Menu menu=null;
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        inflater.inflate(R.menu.main, menu);
        this.menu=menu;
        menu.findItem(R.id.refresh).setVisible(false);
        getActivity().invalidateOptionsMenu();
        //setHasOptionsMenu(false);
        super.onCreateOptionsMenu(menu,inflater);
    }
}

MainActivity在哪里定义了MENU DRAWER:

 //Slide menu item click listener
private class SlideMenuClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
        // display view for selected nav drawer item
        displayView(position);
    }
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    switch (item.getItemId()) {
        case R.id.refresh:
            Toast.makeText(this, "Refreshing data...", Toast.LENGTH_SHORT).show();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

 // Called when invalidateOptionsMenu() is triggered
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.refresh).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

最佳答案

在要隐藏Item的 fragment 中

@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.action_search);
    if(item!=null)
       item.setVisible(false);
}

在你的 fragment 的 onCreate() 中

 setHasOptionsMenu(true);

关于android - 在某些 fragment 中隐藏 MenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21498534/

相关文章:

android - 可搜索微调器适配器 android 中的问题

android - Android 应用程序中 Google map 上的 KML

Android HttpClient内存泄漏?

android - 旋转后 FragmentTransaction show() 不适用于特定 fragment

android - 支持 v7 ActionBarActivity,每次调用 SupportInvalidateOptionsMenu() 后调用 OnCreateOptionsMenu()

Android 选项菜单在 Google map (Api v2) 上显示不佳

android - 工作灯选项菜单

android - Dashclock 小部件扩展未更新

android - 将 Youtube api 播放器与 Android Fragment 一起使用

android - requireActivity 和 onActivityCreated 有什么区别