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。在哪里调用它?