10

I have used Sherlock search view widget in action bar for search menu. The code snippet for initializing the search view

        MenuItem item = menu.findItem(R.id.menu_search);
    item.expandActionView();
    mSearchView = (SearchView) item.getActionView();
    mSearchView.setIconifiedByDefault(false);
    mSearchView.setQuery(query, false);
    mSearchView.clearFocus();

The above code shows expanded search view with default search query. The problem is when I press back button the search view again collapses before returning to previous activity in android. I don't want the search view to collapse on back key press. How to prevent search view from collapsing on back key press?

user1526671
  • 797
  • 4
  • 15
  • 33

2 Answers2

2

SearchView.setIconifiedByDefault(false) should be enough if you have set the attribute android:showAsAction="always" in your menu xml.

The following snippet works for me:

default_options.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    <item android:id="@+id/action_search"
        android:title="@string/search"
        android:icon="@drawable/topbar_busqueda"
        androidshowAsAction="always"
        android:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

Activity

 @Override
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     inflater.inflate(R.menu.default_options menu);
     MenuItem menuItem = menu.findItem(R.id.action_search);
     SearchView searchView = (SearchView) menuItem.getActionView();
     prepareSearchViewAdapter(searchView, menuItem);
     super.onCreateOptionsMenu(menu, inflater);
 }

private void prepareSearchViewAdapter(final SearchView searchView, MenuItem menuItem) {
    searchView.setIconifiedByDefault(false);
}
Juan José Melero Gómez
  • 2,617
  • 1
  • 16
  • 34
  • 1
    Still works in 2020 with `androidx.appcompat.widget.SearchView`. My searchview was not in a menu, so I didn't need to set `showAsAction="always"` – Cullub Mar 17 '20 at 22:41
0

Add a boolean value when search view is open like this

private Boolean isSearchPageIsOpen = true;

Then add the even to handle back button press

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            if(isSearchPageIsOpen ){

                do something here
        }
        return false;
vinoth
  • 215
  • 3
  • 9