更改片段中菜单项的可见性

时间:2014-10-17 07:40:07

标签: android android-fragments android-actionbar android-optionsmenu

我正在尝试在更改片段时隐藏一些菜单项,但似乎这不起作用。这就是我在做什么: 定义菜单和菜单项:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.actionbar_sharecall, menu);

        actionMenu = menu;
        MenuItem searchItem = menu.findItem(R.id.action_searchmenuitem);
        MenuItem item = menu.findItem(R.id.action_menushare);
        // item.setVisible(false);
        // searchItem.setVisible(false);

        topSearch = searchItem;
        topShare = item;
        final MRShareActionProvider actionProvider = new MRShareActionProvider(
                this);
        MenuItemCompat.setActionProvider(item, actionProvider);
        actionProvider
                .setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
        actionProvider.setOnShareTargetSelectedListener(this);
        actionProvider.setShareIntent(createShareIntent());
        return true;

    }

更改片段并更改可见性:

  //changing visibility    
    topSearch.setVisible(false);
    frag = new SyncFragment();
    FragmentTransaction ft = getSupportFragmentManager()
    .beginTransaction();
    ft.replace(R.id.fragment_content, frag);
    ft.commitAllowingStateLoss();

这是我的SyncFragment:

public class SyncFragment extends MRBaseACBFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_sync, null);
    }


}

但是片段改变后,我仍然可以看到菜单项。有人可以帮我解决一下如何做到这一点吗?

2 个答案:

答案 0 :(得分:0)

我不知道它为什么不起作用,但尝试直接在onCreateOptionMenu更改可见性。

如果有效,那么当您要隐藏它时,请致电invalidateOptionsMenu(或supportInvalidateOptionsMenu进行操作栏compat),它会强制再次调用onCreateOptionMenu,您可以更新菜单是否存在片段。

答案 1 :(得分:0)

在您的片段中添加以下代码

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

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



 @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        menu.findItem(R.id.action_cart).setVisible(false);
        menu.findItem(R.id.action_search).setVisible(false);
        menu.findItem(R.id.overflow).setVisible(false);
    }