我使用的是Android 4.1.2。我在ActionBar
上有一个SearchView
小部件。android developer站点上关于SearchView.OnQueryTextListener
的文档指出,当用户提交查询时,将触发/调用onQueryTextSubmit
。这可能是由于键盘上的按键或按下提交按钮造成的。“
如果搜索查询为空,则不会发生这种情况。我需要它在一个空查询上触发,以清除ListView的搜索过滤器。这是一个bug,还是我做错了什么?
发布于 2012-11-27 12:08:45
这不是一个错误,source code故意检查空值和空值:
private void onSubmitQuery() {
CharSequence query = mQueryTextView.getText();
if (query != null && TextUtils.getTrimmedLength(query) > 0) {
但是,当用户清除搜索EditText时,您应该能够使用OnQueryTextChange回调来清除ListView的可过滤内容。
发布于 2015-11-20 11:05:13
我有一个更简单的解决办法:使用onQueryTextChange,但只有在它为空时才渲染。
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
renderList(true);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (searchView.getQuery().length() == 0) {
renderList(true);
}
return false;
}
});
发布于 2013-10-30 06:42:11
我也遇到了同样的问题,最终得到了以下解决方案:自定义SearchView
+ OnQueryTextListener.onQueryTextChange
自定义SearchView:
public class MySearchView extends SearchView {
private boolean expanded;
public MySearchView(Context context) {
super(context);
}
@Override
public void onActionViewExpanded() {
super.onActionViewExpanded();
expanded = true;
}
@Override
public void onActionViewCollapsed() {
super.onActionViewCollapsed();
expanded = false;
}
public boolean isExpanded() {
return expanded;
}
}
创建action并设置回调:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
searchAction = menu.add(0, SEARCH_ACTION_ID, 0 , getString(R.string.action_search));
searchAction.setShowAsAction(SHOW_AS_ACTION_ALWAYS | SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
searchView = new MySearchView(getSherlockActivity());
searchView.setOnQueryTextListener(searchQueryListener);
searchView.setIconifiedByDefault(true);
searchAction.setActionView(searchView);
}
最后一位听众:
private OnQueryTextListener searchQueryListener = new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
search(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (searchView.isExpanded() && TextUtils.isEmpty(newText)) {
search("");
}
return true;
}
public void search(String query) {
// reset loader, swap cursor, etc.
}
};
已在ABS 4.3上测试。
https://stackoverflow.com/questions/13576283
复制相似问题