如何在android中获取searchview的事件

and*_*irl 22 android

我在我的应用程序中使用搜索视图.现在我只想在SearchView文本框中输入文本并将其显示在另一个textview上.如果我键入文本并单击按钮我也可以这样做.但我不想使用任何额外的按钮.我只想在按下回车键时显示结果.

Hig*_*yer 45

尝试使用SearchView的setOnQueryTextListener

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它工作正常.您必须先向搜索视图添加一个侦听器. (2认同)
  • 不,无论是否为侦听器,当输入的字符串为空时,onQueryTextSubmit 都不起作用。 (2认同)

Mr.*_*r.Q 22

上面的答案很好但不完整实际上你需要为你的搜索视图设置一个动作监听器.您可以通过两种方式创建一个类,该类实现必要的类作为OnQueryTextListener并创建一个新对象并将其用作搜索视图查询文本侦听器或使用以下紧凑形式:

        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
            }

        });
Run Code Online (Sandbox Code Playgroud)


Bog*_*yak 6

这也可以通过Jake Wharton的RXAndroid和RxBinding完成,如下所示:

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());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

代码订阅观察文本更改,延迟时间为500毫秒.

这是获取RXAndroid的git repo的链接:https: //github.com/JakeWharton/RxBinding


Jéw*_*ôm' 6

在 Kotlin 中,你可以这样做:

searchView.setOnQueryTextListener(object : OnQueryTextListener {

    override fun onQueryTextChange(newText: String): Boolean {
        return false
    }

    override fun onQueryTextSubmit(query: String): Boolean {
        // task HERE
        return false
    }

})
Run Code Online (Sandbox Code Playgroud)