SearchView 中的 onQueryTextSubmit 在 Android Java 中被处理了两次
The onQueryTextSubmit in SearchView is processed twice in 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;
}
只是一个镜头。由于您是自己处理搜索,因此请尝试返回 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(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
被执行两次:
searchView.clearFocus();
当从模拟器上的键盘输入时,它会生成两个输出,但当单击模拟器键盘上的搜索按钮时,它会创建单个输出。所以,我认为你不应该担心这个。在所有手机或平板电脑上,此错误可能不会发生。
但是,searchView.clearFocus();也在这里工作。
对于遇到同样问题的每个人,这里是文档中关于 onQueryTextSubmit(String query)
方法的内容 here :
The listener can override the standard behavior by returning true to
indicate that it has handled the submit request.
所以只需将 return false
替换为 return true
:
@Override
public boolean onQueryTextSubmit(String query) {
if (query != null)
audioRequest(query);
return true;
}
想要搜索 1 个以上的词?
searchView.setOnQueryTextListener(新SearchView.OnQueryTextListener() {
@覆盖
public boolean onQueryTextSubmit(字符串查询)
{return 错误; }
@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
在 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
中的错误。
为什么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;
}
只是一个镜头。由于您是自己处理搜索,因此请尝试返回 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(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
被执行两次:
searchView.clearFocus();
当从模拟器上的键盘输入时,它会生成两个输出,但当单击模拟器键盘上的搜索按钮时,它会创建单个输出。所以,我认为你不应该担心这个。在所有手机或平板电脑上,此错误可能不会发生。
但是,searchView.clearFocus();也在这里工作。
对于遇到同样问题的每个人,这里是文档中关于 onQueryTextSubmit(String query)
方法的内容 here :
The listener can override the standard behavior by returning true to indicate that it has handled the submit request.
所以只需将 return false
替换为 return true
:
@Override
public boolean onQueryTextSubmit(String query) {
if (query != null)
audioRequest(query);
return true;
}
想要搜索 1 个以上的词?
searchView.setOnQueryTextListener(新SearchView.OnQueryTextListener() { @覆盖 public boolean onQueryTextSubmit(字符串查询) {return 错误; }
@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
在 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
中的错误。