2015-07-23 3 views
5

Я внедрил Android search widget в моем приложении navigation drawer. Я установил его, чтобы открыть клавиатуру и сфокусировать editText при нажатии на значок поиска. Я хочу установить кнопку «Назад» (кнопка «вверх»), чтобы скрыть клавиатуру. Я искал в сети для R.id кнопки вверх, и нашел это android.R.id.home. Так что я поставил его, чтобы быть:Задайте функциональность кнопки виджета поиска

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

Я отлажена код и заметил, что при нажатии на значок navigation bar костров вверх по android.R.id.home, но попав на кнопку виджета поиска даже не входит в onOptionsItemSelected(MenuItem item) функция. Я также попытался это:

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

Но не получилось.

Как скрыть клавиатуру при нажатии кнопки назад (вверх)?

Установка вид поиска:

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

ответ

2

Следующий код должен работы:

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

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

Однако это не работает для меня по какой-то причине. : -/

Я нашел обходной путь ниже 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) { 

    } 
}); 

Я не думаю, что использование android.R.id.home будет работать, так как я думаю, что onOptionsItemSelected(android.R.id.home) будет называться только после того, как SearchView был закрыт.

+0

Вы проверяете эту тему? [OnCloseListener SearchView не работает] (http://stackoverflow.com/questions/9327826/searchviews-oncloselistener-doesnt-work/12975254#12975254). Во-вторых, этот автор не должен полагаться на 'android.R.id.home', однако, является полностью корневым. –