【问题标题】:Android SearchView empty stringAndroid SearchView 空字符串
【发布时间】:2013-04-06 06:01:46
【问题描述】:

我正在尝试使用 SearchView 并且一切正常,但我想搜索空字符串时除外。
当我删除最后一个字符时,onQueryTextChange 会做出反应,但我希望用户能够在搜索字段为空时按下搜索按钮。

 final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextChange(String newText) {
                    // Do something
                    return true;
                }

                @Override
                public boolean onQueryTextSubmit(String query) {
                    // Do something
                    return true;
                }
            };

        searchView.setOnQueryTextListener(queryTextListener);

我也尝试过使用 OnKeyListner。但它似乎也不起作用。

            searchView.setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

                //Do something
                return true;
            }
        }); 

这似乎是一件很简单的事情,但我无法让它发挥作用。有什么建议吗?

编辑

我已经寻找了一段时间的解决方案,在发布此消息几分钟后,我找到了解决方案。
在这个帖子上我发现这不是一个错误,但实际上是故意的。

Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

所以我刚刚下载了ActionBarSherlock,并对onSubmitQuery()方法做了一些修改

来自

private void onSubmitQuery() {
    CharSequence query = mQueryTextView.getText();
    if (query != null && TextUtils.getTrimmedLength(query) > 0) {
        if (mOnQueryChangeListener == null
                || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
            if (mSearchable != null) {
                launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
                setImeVisibility(false);
            }
            dismissSuggestions();
        }
    }
}

以及修改后的版本

private void onSubmitQuery() {
    CharSequence query = mQueryTextView.getText();
    if(query == null) {query = "";}
    if (mOnQueryChangeListener == null
                || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
        if (mSearchable != null) {
                launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
                setImeVisibility(false);
         }
         dismissSuggestions();
    }
}

如果其他人遇到此问题,希望这会有所帮助。

【问题讨论】:

  • 您可以回答自己的问题,而不是编辑您的原始问题。

标签: java android searchview


【解决方案1】:

我在 SearchView 上遇到了同样的问题,但我不想使用 ActionBarSherlock,所以我想出了一个解决方案,包括按照指南 http://novoda.com/blog/styling-the-actionbar-searchview/ 所示设置您自己的 SearchView 的样式,并为 EditText(How do I trigger an action when the user has hit enter?) 设置 OnEditorActionListener,这是其中的一部分SearchView 的。

final SearchView searchView = (SearchView)findViewById(R.id.search);
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);
searchPlate.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            //Do something
        }
        return false;

    });

【讨论】:

    【解决方案2】:

    也许它不适合您的应用,但您也可以选择使用简单的EditText,然后添加TextWatcher 侦听器。这样即使用户输入了一个空字符串,你也能捕捉到每一个输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2017-10-14
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多