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



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

这是我的代码:

 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;
}

您可以使用以下代码来防止onQueryTextSubmit被执行两次:

searchView.clearFocus();

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

但是,searchView.clearFocus();也在这里工作。

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_DOWNKeyEvent.action == ACTION_UP调用的。

这似乎是SearchView中的一个错误。

只是一个镜头。由于您自己处理搜索,请尝试返回true而不是false。

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

http://developer.android.com/reference/android/widget/SearchView.OnQueryTextListener.html

想要搜索一个以上的单词吗

searchView.setOnQueryTextListener(新的searchView.OnQueryTextLister(){@Override公共布尔值onQueryTextSubmit(字符串查询){return 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;
        }
    });

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

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;
        }
    });

对于所有正在处理同一问题的人,以下是文档中关于onQueryTextSubmit(String query)方法的说明:

监听器可以通过返回true来覆盖标准行为指示它已经处理了提交请求。

因此,只需将return false替换为return true:

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

相关内容

  • 没有找到相关文章

最新更新