有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android SearchView空字符串

我正在尝试使用SearchView,除了搜索空字符串外,其他一切都正常工作
当我删除最后一个字符时,onQueryTextChange会做出反应,但我希望用户能够在searchfield为空时按下search按钮

 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;
            }
        }); 

这似乎是一件很简单的事情,但我不能让它工作。有什么建议吗

编辑

我已经寻找了一个解决方案一段时间了,在发布这篇文章几分钟后,我找到了一个解决方案
在这个线程中,我发现这不是一个bug,但实际上是故意的

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();
    }
}

希望这对其他人有帮助


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    我对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;
    
        });