30

我已经为此苦苦挣扎了好几个星期。我有一个全局搜索,它提供了一个自定义列表视图,并在用户键入时提供了建议。当用户选择一个选项时,我希望搜索视图返回到完全折叠的状态。

在此处输入图像描述

相反,它会缩小但保持在稍微扩大的视图中。

在此处输入图像描述

我已经把我能找到的所有东西都扔到这个东西上来关闭它,但我一辈子都找不到正确的方法。这是功能:

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

当从自定义“建议”列表视图中选择项目时,手动调用关闭搜索。

4

10 回答 10

53

而不是调用_searchView.onActionViewCollapsed()call menuItem.collapseActionView()where _searchView = menuItem.getActionView()

于 2013-02-06T00:11:12.573 回答
45

找到了。调用应该是_searchView.onActionViewCollapsed()。为什么你称之为“听众”风格的方法(即,以'on'开头的方法)超出了我的范围。

于 2012-12-03T22:19:34.520 回答
20

@sebastian 这实际上是不对的。

我在这个问题上被困了一段时间,但最后我设法以正确的方式处理它。您应该调用menuSearch.collapseActionView(); 反而。此方法将调用您可以覆盖的onActionViewCollapsed 。所以你不要打电话给听众;)

MenuItem menuSearch = menu.findItem(R.id.itemSearch);
SearchView searchView = (SearchView) menuSearch.getActionView();
//Don't use next line
//searchView.onActionViewCollapsed();
menuSearch.collapseActionView();
于 2013-08-26T13:45:52.163 回答
12

如果您使用的是Toolbar (android.support.v7.widget.Toolbar)和相应的SearchView (android.support.v7.widget.SearchView),则可以:

    searchView.setQuery("", false);
    searchView.clearFocus();
    searchView.setIconified(true);
于 2016-02-26T07:01:36.180 回答
8

您应该清除搜索,移除焦点,然后调用:

searchView.setIconified(true);
于 2015-03-15T22:03:04.027 回答
3

这对我有用,它还默认关闭了键盘

MenuItemCompat.collapseActionView(menuItem);
于 2014-09-07T08:47:17.583 回答
3
searchView.setIconified(true); // Call this twice
searchView.setIconified(true);

这个对我有用。

于 2017-01-21T11:08:27.670 回答
3

这对我有用searchMenuItem.collapseActionView();

于 2017-06-16T10:06:33.677 回答
2

根据最新的文档源代码iff ,返回false应该已经足够了。 iconifiedByDefault == true

您是否有任何机会定义iconifiedByDefault="false"或调用setIconifiedByDefault(false)

于 2014-12-18T23:33:53.630 回答
0

我已将“开始”按钮更改为“下一步”,因此唯一对我有用的方法(在 API 19 上) 是closeBtn.performClick(); closeBtn.performClick(); 在. 你可以得到这样的:OnEditorActionListenerAutoCompleteTextViewAutoCompleteTextView

LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
于 2015-09-23T17:50:04.283 回答