SearchView中的onQueryTextSubmit在Android Java中处理了两次

SearchView中的onQueryTextSubmit在Android Java中处理了两次,java,android,searchview,Java,Android,Searchview,为什么SearchView中的onquerytexsubmit方法会被处理两次? 我需要一个结果,我怎么做 这是我的代码: public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getAction

为什么
SearchView
中的
onquerytexsubmit
方法会被处理两次? 我需要一个结果,我怎么做

这是我的代码:

 public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            if (query != null)
                audioRequest(query);
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });
    return true;
}

只是一次机会。由于您自己处理搜索,请尝试返回true而不是false

@Override
public boolean onQueryTextSubmit(String query) {
    if (query != null)
        audioRequest(query);
    return true;
}

在文本发生如下更改后,尝试调用您的方法

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

        @Override
        public boolean onQueryTextChange(String newText) {
            if (newText != null)
                audioRequest(newText);
            return false;
        }
    });

您可以使用以下代码防止执行两次
onquerytexsubmit


searchView.clearFocus()

从仿真器键盘输入时,它会生成两个输出,但单击仿真器键盘上的搜索按钮时,它会创建单个输出。所以,我认为你不应该为此担心。在所有手机或平板电脑上,此错误可能不会发生


但是,searchView.clearFocus();也可以在这里使用。

对于每个正在为同一问题而挣扎的人,以下是文档中关于
onquerytexsubmit(字符串查询)
方法的说明:

侦听器可以通过将true返回到 指示它已处理提交请求

因此,只需将
返回false
替换为
返回true

@Override
public boolean onQueryTextSubmit(String query) {
    if (query != null)
        audioRequest(query);
    return true;
}

要搜索多个单词吗?

searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){ @凌驾 公共布尔值onQueryTextSubmit(字符串查询) {返回false;}

        @Override
        public boolean onQueryTextChange(String newText) {


            newText = newText.toLowerCase();

            final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>();

            for (int i = 0; i < wordcombimelist.size(); i++) {

                final String text = wordcombimelist.get(i).toLowerCase();
                if (text.contains(newText)) {

                    filteredList.add(new DictObjectModel(wordcombimelist.get(i),meancombimelist.get(i)));
                }
            }
            adapter = new CustomAdapter(filteredList);
            recyclerView.setAdapter(adapter);


            return true;
        }
    });
@覆盖
公共布尔onQueryTextChange(字符串newText){
newText=newText.toLowerCase();
最终ArrayList filteredList=新ArrayList();
对于(int i=0;i
SearchView
在Android API 28上具有以下
OnEditorActionListener

private final OnEditorActionListener mOnEditorActionListener = new OnEditorActionListener() {

    /**
     * Called when the input method default action key is pressed.
     */
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        onSubmitQuery();
        return true;
    }
};
在我的调试器中,我看到调用
onEditorAction
时同时调用
KeyEvent.action==KeyEvent.action\u DOWN
,然后调用
KeyEvent.action==action\u UP


这看起来像是
搜索视图中的一个错误

我正在执行
返回true
,我仍然看到这种行为。这是一个好概念,但如果已经为true,则无法修复。如上所述,可能是emulator特有的bug。在哪里调用它?