How to completely collapse a SearchView after an i

2019-01-31 19:58发布

I've been struggling with this for weeks.. I have a global search that offers up a custom listview with suggestions as a user types. When a user selects an option, I want the searchview to return to its completely collapsed state.

enter image description here

Instead, it shrinks down but stays in a slightly expanded view.

enter image description here

I've thrown EVERYTHING I can find at this thing to close it, but cannot for the life of me get the right method. Here's the function:

    final SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener() {

        @Override
        public boolean onClose() {
            return closeSearch();
        }
    };

    protected boolean closeSearch() {
    _searchView.clearFocus();
    _searchView.setQuery("", false);
    _searchView.setFocusable(false);
    _searchMenuItem.collapseActionView();
    isSearchFragmentVisible(false);
    return false;
}

Close search is then manually called when an item is selected from the custom "suggestion" listview.

10条回答
地球回转人心会变
2楼-- · 2019-01-31 20:18

Found it. The call should be _searchView.onActionViewCollapsed(). Why on earth you call a "listener" style method (ie, one that begins with 'on') is beyond me.

查看更多
迷人小祖宗
3楼-- · 2019-01-31 20:20

@sebastian that's not actually right.

I've been stucked at this issue for a while, but finally I've managed to handle it in the right way. You're suppose to call menuSearch.collapseActionView(); instead. This method will call onActionViewCollapsed, which you could override. So you don't call a listener ;)

MenuItem menuSearch = menu.findItem(R.id.itemSearch);
SearchView searchView = (SearchView) menuSearch.getActionView();
//Don't use next line
//searchView.onActionViewCollapsed();
menuSearch.collapseActionView();
查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-01-31 20:27

If you're using Toolbar (android.support.v7.widget.Toolbar) and the corresponding SearchView (android.support.v7.widget.SearchView) with it, this works:

    searchView.setQuery("", false);
    searchView.clearFocus();
    searchView.setIconified(true);
查看更多
等我变得足够好
5楼-- · 2019-01-31 20:27

I've changed the 'Go' button to 'Next', so the only method that worked for me (on API 19) is typing closeBtn.performClick(); closeBtn.performClick(); (Clicking 'close' button twice) in the OnEditorActionListener of the AutoCompleteTextView. You can get the AutoCompleteTextView like this:

LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
查看更多
等我变得足够好
6楼-- · 2019-01-31 20:29

You should clear the search, remove the focus and then call:

searchView.setIconified(true);
查看更多
爷的心禁止访问
7楼-- · 2019-01-31 20:40

This worked for me searchMenuItem.collapseActionView();

查看更多
登录 后发表回答