为什么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;
}
答案 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;
}
};
在调试器中,我看到onEditorAction
和KeyEvent.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;
}
});