2012-11-11 3 views
3

У меня есть SearchView в моей панели действий теперь он работает точно так, как должен, каким-либо образом у меня есть одна проблема, когда я нажимаю кнопку отправки, т.е. запрос отправляется, и результаты появляются, когда я возвращаюсь обратно активность, с которой я начинаю поиск с SearchView, расширяется, мой вопрос, как я могу ее закрыть, т.е. обозначил ее при отправке. это мой код.force iconified on SearchView

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; 
         } 
        }); 

ответ

2

Это решение работает:

@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); 
    } 
2

Для API> = 14 вы можете использовать item.collapseActionView().

0

Я взял это из другого вопроса, и это, казалось, сработало для меня.

@Override 
public void onStart() 
{ 
    if (mSearchView != null) 
    { 

     getSearchMenuItem().collapseActionView(); 
    } 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    //get your search view 
    msearchMenuItem = menu.findItem(R.id.search); 
} 
public MenuItem getSearchMenuItem() { 
      return msearchMenuItem; 
} 

закрывает SearchView каждый раз, когда вы нажмете кнопку назад (что делает деятельность перейдет в OnStart())