首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查询字符串为空时未触发Android SearchView.OnQueryTextListener OnQueryTextSubmit

查询字符串为空时未触发Android SearchView.OnQueryTextListener OnQueryTextSubmit
EN

Stack Overflow用户
提问于 2012-11-27 09:56:22
回答 14查看 55.3K关注 0票数 29

我使用的是Android 4.1.2。我在ActionBar上有一个SearchView小部件。android developer站点上关于SearchView.OnQueryTextListener的文档指出,当用户提交查询时,将触发/调用onQueryTextSubmit。这可能是由于键盘上的按键或按下提交按钮造成的。“

如果搜索查询为空,则不会发生这种情况。我需要它在一个空查询上触发,以清除ListView的搜索过滤器。这是一个bug,还是我做错了什么?

EN

回答 14

Stack Overflow用户

发布于 2012-11-27 12:08:45

这不是一个错误,source code故意检查空值和空值:

代码语言:javascript
复制
private void onSubmitQuery() {
    CharSequence query = mQueryTextView.getText();
    if (query != null && TextUtils.getTrimmedLength(query) > 0) {

但是,当用户清除搜索EditText时,您应该能够使用OnQueryTextChange回调来清除ListView的可过滤内容。

票数 15
EN

Stack Overflow用户

发布于 2015-11-20 11:05:13

我有一个更简单的解决办法:使用onQueryTextChange,但只有在它为空时才渲染。

代码语言:javascript
复制
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;
            }
    });
票数 14
EN

Stack Overflow用户

发布于 2013-10-30 06:42:11

我也遇到了同样的问题,最终得到了以下解决方案:自定义SearchView + OnQueryTextListener.onQueryTextChange

自定义SearchView:

代码语言:javascript
复制
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并设置回调:

代码语言:javascript
复制
@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);
}

最后一位听众:

代码语言:javascript
复制
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上测试。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13576283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档