2015-07-23 13 views
5

Ho implementato l'Android search widget nell'app basata su . L'ho impostato per aprire la tastiera e focalizzare lo editText quando si fa clic sull'icona di ricerca. Voglio impostare il pulsante Indietro (pulsante Su) per nascondere la tastiera. Ho cercato sul web lo R.id del pulsante su e ho trovato questo android.R.id.home. Così ho impostato per essere:Imposta funzionalità del pulsante di ritorno del widget di ricerca

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    ... 
    case android.R.id.home: 
     hideKeyboard(); 
     break; 
    ... 
} 

ho il debug del codice e ho notato che cliccando sulle navigation bar icona incendi il android.R.id.home, ma colpendo il tasto up del widget di ricerca non ha nemmeno entrare nel onOptionsItemSelected(MenuItem item) funzione. Inoltre ho provato questo:

searchView.setOnFocusChangeListener(new OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (!hasFocus) { 
      hideKeyboard(); 
     } 
    } 
}); 

ma non ha funzionato.

Come posso nascondere la tastiera quando si preme il pulsante Indietro (su)?

Impostazione della visualizzazione di ricerca:

private void setSearchView(Menu menu) { 
    // Get the SearchView and set the searchable configuration 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
    // Assumes current activity is the searchable activity 
    searchView.setSearchableInfo(searchManager 
      .getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); 

    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
     public boolean onQueryTextChange(String newText) { 
      Home.getFilter().filter(newText); 
      return true; 
     } 

     public boolean onQueryTextSubmit(String query) { 
      return true; 
     } 
    }; 
    searchView.setOnQueryTextListener(queryTextListener); 
} 

risposta

2

Il seguente codice dovrebbe lavoro:

searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 

searchView.setOnCloseListener(new OnCloseListener() { 
    @Override 
    public bool OnClose() { 
     searchView.clearFocus(); 
     return true; 
}); 

Tuttavia questo non ha funzionato per me per qualche motivo. : -/

ho trovato la soluzione qui di seguito here:

searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 

searchView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() { 

    @Override 
    public void onViewDetachedFromWindow(View v) { 
     searchView.clearFocus(); 
    } 

    @Override 
    public void onViewAttachedToWindow(View v) { 

    } 
}); 

Non credo che l'utilizzo di android.R.id.home funzionerà in quanto penso che onOptionsItemSelected(android.R.id.home) sarà chiamato solo una volta l'SearchView è stato chiuso.

+0

Hai controllato questa discussione? [SearchView's OnCloseListener non funziona] (http://stackoverflow.com/questions/9327826/searchviews-oncloselistener-doesnt-work/12975254#12975254). Seconda parte, quell'autore non dovrebbe basarsi su "android.R.id.home" è completamente corrent, però. –

Problemi correlati