8

我正在尝试使用 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 未在空查询字符串上触发

所以我刚刚下载了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();
    }
}

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

4

2 回答 2

0

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

于 2014-09-24T15:48:33.390 回答
0

我对 SearchView 有同样的问题,但我不想使用 ActionBarSherlock,所以我想出了解决方案,包括设置您自己的 SearchView 的样式,如指南http://novoda.com/blog/styling-the-actionbar-searchview/和为 EditText 设置 OnEditorActionListener(当用户按 Enter 时如何触发操作?),它是 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;

    });
于 2015-08-15T09:08:00.120 回答