Задаване на функционалност на бутона за връщане на джаджа за търсене

Внедрих 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
Проверихте ли тази тема? OnCloseListener на SearchView не работи . Втората част, че авторът не трябва да разчита на android.R.id.home, обаче е напълно актуална. - person Konstantin Loginov; 09.01.2016