TheLettuceMaster
TheLettuceMaster

Reputation: 15744

Where to Auto-Collapse ActionBar SearchView

When a user submits a app wide search in the Search Widget in the ActionBar, I want it to auto collapse after submit. Submit basically opens up the SearchableActivity. Currently, if they close the search results activity (SearchableActivity), the Search Widget is still open. I just want it closed; and with no text.

From reading around, I seem to think that the answer is this

`searchView.onActionViewCollapsed() ;' 

however, I am not sure where to put it?

Here is my code:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    setupNewSearchView(searchItem, searchManager);



}

return true;
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void setupNewSearchView(final MenuItem searchItem,
        SearchManager searchManager) {
    android.widget.SearchView searchView = (android.widget.SearchView) searchItem
            .getActionView();
    searchView.setSearchableInfo(searchManager
            .getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    MenuItem About = menu.findItem(R.id.About);
    MenuItem Login = menu.findItem(R.id.Login);
    MenuItem Logout = menu.findItem(R.id.Logout);
    MenuItem Settings = menu.findItem(R.id.Settings);
    MenuItem Search = menu.findItem(R.id.menu_search);
    MenuItem Add = menu.findItem(R.id.Add);

    Add.setVisible(false);

    if (LoggedStatus == true) {
        // show the log out option
        Logout.setVisible(true);
        Login.setVisible(false);
        Settings.setVisible(true);
    } else {
        // show the log in option
        Logout.setVisible(false);
        Login.setVisible(true);
        Settings.setVisible(false);
    }

    About.setVisible(true);

    return true;
}

Note, I am using SherlockActionBar.

Upvotes: 2

Views: 3931

Answers (1)

TheLettuceMaster
TheLettuceMaster

Reputation: 15744

I did this:

searchView.setOnQueryTextListener(new OnQueryTextListener() {

        public boolean onQueryTextChange(String arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        public boolean onQueryTextSubmit(String arg0) {
            if (searchItem != null) {
                searchItem.collapseActionView();
            }
            return false;
        }

    });

and in my xml menu file:

   android:showAsAction="always|collapseActionView"
  • it works.

Upvotes: 6

Related Questions