Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

后端 未结 13 843
盖世英雄少女心
盖世英雄少女心 2020-12-05 10:17

I am using Android 4.1.2. I have a SearchView widget on an ActionBar. Documentation on SearchView.OnQueryTextListener

相关标签:
13条回答
  • 2020-12-05 10:59

    Another option is to trigger the onQueryTextChange method manually through a TextWatcher:

    public class MyActivity extends Activity implements SearchView.OnQueryTextListener, TextWatcher {
    
        // Basic onCreate(Bundle) here
    
        @Override
        public boolean onCreateOptionsMenu (final Menu menu) {
            getMenuInflater().inflate(R.menu.myMenu, menu);
    
            final SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
            final SearchManager manager = (SearchManager) getSystemService(SEARCH_SERVICE);
            searchView.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
            searchView.setOnQueryTextListener(this);
    
            final int resource_edit_text = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
            ((EditText) searchView.findViewById(resource_edit_text)).addTextChangedListener(this);
    
            return super.onCreateOptionsMenu(menu);
        }
    
        // Implementation of TextWatcher, used to have a proper onQueryTextChange (it doesn't update when the last character is removed)
        @Override
        public void beforeTextChanged (final CharSequence charSequence, final int start, final int count, final int after) {}
    
        @Override
        public void onTextChanged (final CharSequence charSequence, final int start, final int before, final int after) {}
    
        @Override
        public void afterTextChanged (final Editable editable) {
            if (editable.length() == 0)
                onQueryTextChange(editable.toString());
        }
    
        // Implementation of OnQueryTextChangeListener
    
        @Override
        public boolean onQueryTextChange (final String query) {
            // do stuff
            return false;
        }
    
        @Override
        public boolean onQueryTextSubmit (final String query) {
            // do stuff
            return false;
        }
    }
    

    This all goes with all the default xml files which have been given up here, that is not the point of this answer. This is a workaround that I choose to use, feel free to use others

    0 讨论(0)
提交回复
热议问题