0

How can I do something like this ?

  • When the ActionBar searchview is closed, the button is enabled.

enter image description here

  • When the ActionBar searchview is opened, the button is disabled.

enter image description here

Are there listeners that I can use ? Or am I forced to use something like a while loop or something else ?

For the case when SearchView is opened, I know I can use menuItem.setOnMenuItemClickListener, but for the closing I don't know...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem menuItem = menu.findItem(R.id.search);

    //...

    menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            findViewById(R.id.button).setEnabled(false);
            return false;
        }
    });
    return true;
}
Drarig29
  • 1,902
  • 1
  • 19
  • 42
  • 1
    http://stackoverflow.com/questions/9327826/searchviews-oncloselistener-doesnt-work – Tim Oct 24 '15 at 17:36

1 Answers1

1

To know when the SearchView is opening or closing you can use OnActionExpandListener:

  • when is closing onMenuItemActionCollapse will be called.
  • when is opening onMenuItemActionExpand will be called.

For example:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    MenuItem menuItem = menu.findItem(R.id.search);

    //...

    MenuItemCompat.setOnActionExpandListener(menuItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            findViewById(R.id.button).setEnabled(false);
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            findViewById(R.id.button).setEnabled(true);
            return true;
        }
    });

    return true;
}
Mattia Maestrini
  • 32,270
  • 15
  • 87
  • 94