2015-07-23 12 views
5

Zaimplementowałem system Android search widget w mojej aplikacji opartej na navigation drawer. Ustawiłem go, aby otworzyć klawiaturę i ustawić ostrość na editText po kliknięciu ikony wyszukiwania. Chcę ustawić przycisk Wstecz (przycisk w górę), aby ukryć klawiaturę. Przeszukałem sieć pod kątem R.id przycisku w górę i znalazłem to android.R.id.home. Więc mam ustawić ją jako:Ustaw funkcjonalność przycisku wstecznego widgetu wyszukiwania

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

I debugowania kodu i zauważyłem, że klikając na ikonę navigation bar pożarów w górę android.R.id.home, ale uderzanie się przycisk wyszukiwania widget nawet nie wprowadzić onOptionsItemSelected(MenuItem item) funkcjonować. Próbowałem również:

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

Ale nie działa.

Jak ukryć klawiaturę po naciśnięciu przycisku cofania (w górę)?

Ustawianie widoku wyszukiwania:

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

Odpowiedz

2

Poniższy kod powinien pracy:

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

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

Jednak to nie działa na mnie z jakiegoś powodu. : -/

znalazłem obejście poniżej 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) { 

    } 
}); 

Nie sądzę, że za pomocą android.R.id.home zadziała ponieważ myślę, że onOptionsItemSelected(android.R.id.home) zostanie wywołana tylko raz SearchView został zamknięty.

+0

Czy sprawdziłeś ten wątek? [Funkcja SearchView w OnCloseListener nie działa] (http://stackoverflow.com/questions/9327826/searchviews-oncloselistener-doesnt-work/12975254#12975254). Druga część, której autor nie powinien polegać na 'android.R.id.home' jest jednak w pełni napięta. –

Powiązane problemy