Установить функциональность кнопки возврата виджета поиска

Я реализовал 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);
}

person itaied    schedule 23.07.2015    source источник


Ответы (1)


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

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

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

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

Я нашел обходной путь ниже здесь:

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.

person Bentley Carr    schedule 09.01.2016
comment
Вы проверяли эту ветку? SearchView OnCloseListener не работает . Однако вторая часть, что автору не следует полагаться на android.R.id.home, полностью верна. - person Konstantin Loginov; 09.01.2016