【问题标题】:Changing visibility of menu items in fragment更改片段中菜单项的可见性
【发布时间】:2014-10-17 07:40:07
【问题描述】:

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

@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);
    }


}

但在片段更改后,我仍然可以看到菜单项。有人可以帮助我解决如何执行此操作吗?

【问题讨论】:

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


    【解决方案1】:

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

    如果它有效,那么当你想隐藏它时调用invalidateOptionsMenu(或supportInvalidateOptionsMenu for actionbar compat),它将强制再次调用onCreateOptionMenu,如果片段存在,你可以更新菜单与否。

    【讨论】:

      【解决方案2】:

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

      @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);
          }
      

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 2019-04-21
        • 2020-04-25
        • 2018-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        相关资源
        最近更新 更多