how to get the events of searchview in android

后端 未结 6 870
傲寒
傲寒 2020-12-15 04:58

I\'m using a search view in my application. Now i just want to get the text typed in the SearchView text box and display it on another textview. If i typed the text and clic

相关标签:
6条回答
  • 2020-12-15 05:18

    It also can be done with RXAndroid and RxBinding by Jake Wharton like this:

    RxSearchView.queryTextChanges(searchView)
                .debounce(500, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<CharSequence>() {
                    @Override
                    public void call(CharSequence charSequence) {
                        if(charSequence!=null){
                            // Here you can get the text
                            System.out.println("SEARCH===" + charSequence.toString());
                        }
                    }
                });
    

    Code is subscribing to observe text change with some delay of 500 milliseconds.

    This is a link to git repo to get RXAndroid: https://github.com/JakeWharton/RxBinding

    0 讨论(0)
  • 2020-12-15 05:20

    In Kotlin, you can do :

    searchView.setOnQueryTextListener(object : OnQueryTextListener {
    
        override fun onQueryTextChange(newText: String): Boolean {
            return false
        }
    
        override fun onQueryTextSubmit(query: String): Boolean {
            // task HERE
            return false
        }
    
    })
    
    0 讨论(0)
  • 2020-12-15 05:23

    This is what I have inside the onCreateOptionsMenu(Menu menu) function on my main activity:

    MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            // Do whatever you need. This will be fired only when submitting.
            return false;
        }
    
        @Override
        public boolean onQueryTextChange(String newText) {
            // Do whatever you need when text changes. 
            // This will be fired every time you input any character.
            return false;
        }
    });
    
    0 讨论(0)
  • 2020-12-15 05:24

    Try to use setOnQueryTextListener of SearchView

    new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) {
            // your text view here
            textView.setText(newText);
            return true;
        }
    
        @Override
        public boolean onQueryTextSubmit(String query) {
            textView.setText(query);
            return true;
        }
    }
    
    0 讨论(0)
  • 2020-12-15 05:29

    The right way to solve this is to use setOnQueryTextListener

    This is a small exmple using Kotlin:

    txtSearch = rootView.searchView 
    txtSearch.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
    
            override fun onQueryTextChange(newText: String): Boolean {
                return false
            }
    
            override fun onQueryTextSubmit(query: String): Boolean {
                return false
            }
     })
    
    0 讨论(0)
  • 2020-12-15 05:35

    The above answer is good but not complete actually you need to set an action listener for your Search view . you can do this in two ways create a class that implements the necessary classes to be an OnQueryTextListener and make a new object of that and use it as your search view query text listener or use the following compact form:

            SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    callSearch(query);
                    return true;
                }
    
                @Override
                public boolean onQueryTextChange(String newText) {
    //              if (searchView.isExpanded() && TextUtils.isEmpty(newText)) {
                        callSearch(newText);
    //              }
                    return true;
                }
    
                public void callSearch(String query) {
                    //Do searching
                }
    
            });
    
    0 讨论(0)
提交回复
热议问题