【问题标题】:How to hide menu item from toolbar when click on search icon in android单击android中的搜索图标时如何从工具栏中隐藏菜单项
【发布时间】:2017-02-17 10:12:31
【问题描述】:

我的工具栏包含搜索图标和刷新图标,当我点击搜索图标然后搜索视图从 onCreateOptionMenu() 膨胀但刷新图标没有被隐藏。如果我在 onMenuItemActionExpand() 中隐藏刷新图标然后在后面按下搜索视图后退图标菜单项搜索和刷新都会隐藏并且默认设置图标变得可见。下面是我实现的代码。请帮助我!!!

MenuItem.java

 @Override
        public boolean onCreateOptionsMenu(final Menu menu) {

            // Inflate the menu; this adds items to the action bar if it is present.
              getMenuInflater().inflate(R.menu.main, menu);
              item_search = menu.findItem(R.id.action_search);
              item_refresh = menu.findItem(R.id.action_refresh);

           final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item_search);
            searchView.setOnSearchClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // hide action item
                    if (menu != null) {
                        menu.findItem(R.id.action_refresh).setVisible(false);
                    }

                }
            });
            searchView.setOnCloseListener(new SearchView.OnCloseListener() {
                @Override
                public boolean onClose() {
                    // re-show the action button
                    if (menu != null) {
                        menu.findItem(R.id.action_refresh).setVisible(true);
                    }
                    return false;

                }
            });

【问题讨论】:

标签: android


【解决方案1】:
Well you could imitate that yourself by hiding all the other items when the SearchView is expanded:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    final MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (android.widget.SearchView) searchItem.getActionView();

    // Detect SearchView icon clicks
    searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setItemsVisibility(menu, searchItem, false);
        }
    });
    // Detect SearchView close
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            setItemsVisibility(menu, searchItem, true);
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

private void setItemsVisibility(Menu menu, MenuItem exception, boolean visible) {
    for (int i=0; i<menu.size(); ++i) {
        MenuItem item = menu.getItem(i);
        if (item != exception) item.setVisible(visible);
    }
}

【讨论】:

    【解决方案2】:
    ​MenuItem action_search;
    MenuItem action_refresh;
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         action_search = menu.findItem(R.id. action_search);
         action_refresh = menu.findItem(R.id. action_refresh);
        return super.onPrepareOptionsMenu(menu);
    }
    @Override
        public boolean onCreateOptionsMenu(final Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
              getMenuInflater().inflate(R.menu.main, menu);
              item_search = menu.findItem(R.id.action_search);
              item_refresh = menu.findItem(R.id.action_refresh);
    
           final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item_search);
            searchView.setOnSearchClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // hide action item
                    if (action_refresh != null) {
                        action_refresh.setVisible(false);
                      invalidateOptionsMenu();
                    }
    
                }
            });
            searchView.setOnCloseListener(new SearchView.OnCloseListener() {
                @Override
                public boolean onClose() {
                    // re-show the action button
                    if (action_search != null) {
                        action_search.setVisible(true);
                    }
                   if (action_refresh != null) {
                       action_refresh.setVisible(true);
                    }
                    invalidateOptionsMenu();
                    return false;
    
                }
            });
    
    ​
    

    【讨论】:

    • 感谢您的回复!!!我应该在哪里调用它,意味着在 setVisibility false 或 true 之后
    • 设置可见性后
    • 我在 setOnSearchClickListener() 中尝试过,它不允许点击搜索图标,而在 setOnCloseListener() 中没有任何改变。请详细说明您的答案
    • if (menu != null) { menu.findItem(R.id.action_refresh).setVisible(true); } invalidateOptionsMenu();
    • 我找到了解决方案,方法是在 menu.xml 中使用 always 而不是 ifroom。它开始工作正常。感谢您的帮助!!!
    【解决方案3】:

    好像是android的bug,可以使用here的解决方案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2016-07-03
      • 2018-02-22
      • 1970-01-01
      相关资源
      最近更新 更多