DEV Community

Cover image for Android SearchView.OnCloseListener Not Working? Here is how to fix it.
K M Rejowan Ahmmed
K M Rejowan Ahmmed

Posted on

2

Android SearchView.OnCloseListener Not Working? Here is how to fix it.

I was working on an android app project which required a SearchView. While working on the SearchView, I discovered that the method setOncloseListener is not working for the SearchView. I did some research and found that a lot of people like are having the same issues. After some testing I found a solution to make the close icon click listener or the OnCloseListener for SearchView work. It is not ideal, but here we go.

SearchView

SearchView with Close Icon

SearchViewSearchView with Close IconBefore going further here are some primary details,

  • I'm using androidx.appcompat.widget.SearchView in a layout.
  • I needed the method to clear queries from searchView, remove focus and finally hide the soft keyboard.

Solution

In your java code add these lines to make the magic work:


 java
        SearchView searchView = findViewById(R.id.search_view);

        int searchCloseButtonId = searchView.findViewById(androidx.appcompat.R.id.search_close_btn).getId();
        ImageView closeButton = searchView.findViewById(searchCloseButtonId);
        closeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                searchView.setQuery("", false);
                searchView.clearFocus();
                binding.searchResultLayout.setVisibility(GONE);
                hideKeyboard();
            }
        });


Enter fullscreen mode Exit fullscreen mode

for hideKeyboard:


 java
        private void hideKeyboard() {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(binding.searchView.getWindowToken(), 0);
        }


Enter fullscreen mode Exit fullscreen mode

And that's it. Now you can make your searchView close icon work as you like.

How it's working?

SearchView has IDs for its own components, in this case, the close icon. In the code have searchView.findViewById(androidx.appcompat.R.id.search_close_btn).getId() which calls the id of the close image from searchView itself.
Later we added this id to an ImageView by using searchView.findViewById(searchCloseButtonId) this. And then just setting on click listener for the ImageView and creating a method for hideKeyboard from searchView windowToken.

So, now you have a solution to fix problems with searchView.setOnCloseListener.

Find me on - Github, Facebook

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

πŸ‘‹ Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay