为什么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_DOWN
和KeyEvent.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;
}