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

时间:2015-12-10 17:04:25

标签: java android searchview

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

这是我的代码:

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

8 个答案:

答案 0 :(得分:17)

您可以使用以下代码阻止onQueryTextSubmit执行两次:

searchView.clearFocus();

答案 1 :(得分:2)

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

但是,searchView.clearFocus();也适用于此。

答案 2 :(得分:0)

只是一枪。由于您自己处理搜索,请尝试返回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

答案 3 :(得分:0)

对于正在努力解决同一问题的每个人,以下是文档中有关onQueryTextSubmit(String query)方法here的说明:

  

侦听器可以通过返回true来覆盖标准行为   表明它已处理了提交请求。

只需将return false替换为return true

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

答案 4 :(得分:0)

想要搜索多个单词?

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){             @覆盖             public boolean onQueryTextSubmit(String query)             {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;
        }
    });

答案 5 :(得分:0)

您必须在调用audioRequest方法后创建空的searchview。 如下更改代码:

public boolean onQueryTextSubmit(String query) {
        if (query != null)
            audioRequest(query);
            searchView.setQuery(null,false);

        return true;
    }

希望对您有帮助!

答案 6 :(得分:0)

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

在调试器中,我看到onEditorActionKeyEvent.action == KeyEvent.ACTION_DOWN都被调用KeyEvent.action == ACTION_UP

这似乎是SearchView中的错误。

答案 7 :(得分:-2)

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

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