Question

I have onQueryTextChange listener on my SearchView.

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String searchString) {
            return true;
        }

        @Override
        public boolean onQueryTextChange(String s) {
            if (s.length() > 5) {
                searchView.setQuery(s.substring(0, 5), false);
            }
            return false;
        }
    });

My goal is to limit number of characters to 5. The problem is that,

  1. I am typing 5 characters.
  2. After that I am typing one more character.
  3. I am hitting same character again and in second hit it is not triggering the listener and it is showing the 6th character in SearchView

Thanks for help

Was it helpful?

Solution

Instead of limiting in listener, I solved it getting EditText in SearchView.

I was using this method to get EditText but it was returning null,

searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
EditText etSearchView = (EditText) searchView.findViewById(id);
etSearchView.setFilters(new InputFilter[] {new InputFilter.LengthFilter(5)});

Instead of getting id of EditText I just passed it's actual id and it worked,

searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
EditText etSearchView = (EditText) searchView.findViewById(R.id.search_src_txt);
etSearchView.setFilters(new InputFilter[] {new InputFilter.LengthFilter(5)});
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top