Search code examples
androidactionbarsherlocksearchview

force iconified on SearchView


I have a SearchView in my actionbar now it works exactly as it should , any way i have one problem , when i click the submit button i.e the query is submitted and the results appear , when i return back to the activity from which i start the search from the SearchView is expanded , my question how can i close it i.e iconified it on submitting . this is my code .

searchView = (SearchView) item.getActionView();
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            searchView.setSearchableInfo(searchManager
                    .getSearchableInfo(getComponentName()));
            searchView.setIconifiedByDefault(true);
            searchView.setIconified(true);
            searchView.setQueryRefinementEnabled(true);
            searchView
                    .setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                        @Override
                        public boolean onQueryTextSubmit(String query) {
                            try {
                                  searchView = (SearchView) item.getActionView();
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager
                .getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(true);
        searchView.setIconified(true);
        searchView.setQueryRefinementEnabled(true);
        searchView
                .setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        try {

                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String newText) {
                        // TODO Auto-generated method stub
                        return false;
                    }
                }); // doesnot work 
                            } catch (Exception ex) {
                                ex.printStackTrace();
                            }
                            return false;
                        }

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

Solution

  • This solution works:

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getSupportMenuInflater().inflate(R.menu.home_screen, menu);
    
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            final MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
            final SearchView searchView = (SearchView) searchMenuItem
                    .getActionView();
            searchView.setIconifiedByDefault(false);
            if (searchManager != null && searchView != null) {
                searchView.setSearchableInfo(searchManager
                        .getSearchableInfo(getComponentName()));
    
                searchView
                        .setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
    
                            @Override
                            public void onFocusChange(View v, boolean hasFocus) {
    
                                if (!hasFocus) {
                                    if (searchMenuItem != null) {
                                        searchMenuItem.collapseActionView();
                                    }// end if
                                    if (searchView != null) {
                                        searchView.setQuery("", false);
    
                                    }// end if
                                }// end if
    
                            }
                        });
    
                searchView
                        .setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    
                            @Override
                            public boolean onQueryTextSubmit(String query) {
                                /**
                                 * hides and then unhides search tab to make sure
                                 * keyboard disappears when query is submitted
                                 */
                                if (searchView != null) {
                                    searchView.setVisibility(View.INVISIBLE);
                                    searchView.setVisibility(View.VISIBLE);
    
                                }
                                return false;
                            }
    
                            @Override
                            public boolean onQueryTextChange(String newText) {
                                // TODO Auto-generated method stub
                                return false;
                            }
                        });
    
            }
    
            return super.onCreateOptionsMenu(menu);
        }