1

enter image description hereMy toolbar contains search icon and refresh icon,when i click on search icon then search view inflate from onCreateOptionMenu() but the refresh icon does not get hide.If i hide refresh icon in onMenuItemActionExpand() then on back press of search view back icon both menu items search and refresh gets hide and default setting icon gets visible.Below is the code which i have implemented.Please help me!!!

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;

                }
            });
Shivam Kapoor
  • 117
  • 1
  • 13
  • Possible duplicate of [SearchView.OnCloseListener does not get invoked](https://stackoverflow.com/questions/13920960/searchview-oncloselistener-does-not-get-invoked) – Félix Adriyel Gagnon-Grenier Oct 10 '17 at 21:00
  • It seems that it's a bug from android, you can use the solution [here](https://stackoverflow.com/a/24573266/3882352 "another solution")! – Caique Matos Oct 10 '17 at 19:56

2 Answers2

0
​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;

            }
        });

​
Alvin Varghese
  • 679
  • 2
  • 9
  • 17
0
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);
    }
}
amit 1984
  • 356
  • 3
  • 9