【问题标题】:How to completely collapse a SearchView after an item selected?选择项目后如何完全折叠 SearchView?
【发布时间】:2012-11-16 19:39:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • searchMenuItem.collapseActionView();感谢Newinjava

标签: android android-actionbar searchview


【解决方案1】:

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

【讨论】:

  • 它适用于 API 级别 14 及以上。如果使用兼容库,可以使用 MenuItemCompat.collapseActionView(menuItem);
  • 我正在使用这种方法来关闭搜索视图和键盘。但问题是,当我重新打开它进行另一次搜索时,我无法提交查询,因为键盘上的“开始”按钮变成了“下一步”按钮。你有解决办法吗?
  • 在我的情况下 .collapseActionView() 使用 android 支持 v7 小部件 SearchView 不起作用。而是调用 onActionViewCollapred() 按预期工作..
  • 完美!从视觉上看,它比替代方案要好得多。另外,menuItem 对象通常在调用者中可见,而 searchView 通常不可见(我将这些语句基于通常存在的代码)。
【解决方案2】:

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

【讨论】:

  • 我同意 Sebastian 的观点:在 ActionBar 中的 android.support.v4.view.MenuItemCompat 的 menuItem 中使用 android.support.v7.widget.SearchView 的 searchView,searchView 不能折叠调用 @ 987654322@ 我不得不在“onQueryTextSubmit”回调中调用searchView.onActionViewCollapsed();。键盘也被解雇了。我的键盘“Ok”按钮标签在连续调用 searchView 之间的“Ok”和“Next”之间切换。我不知道为什么。
  • 只有@Ender Muab'Dib 的回答对我有用,你应该调用 menuSearch.collapseActionView()
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    如果您将 Toolbar (android.support.v7.widget.Toolbar) 和相应的 SearchView (android.support.v7.widget.SearchView) 与它,这有效:

        searchView.setQuery("", false);
        searchView.clearFocus();
        searchView.setIconified(true);
    

    【讨论】:

    • 只有这对我有用,使用带有工具栏的 AppCompat 并支持 SearchView。应该是公认的答案
    【解决方案5】:

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

    searchView.setIconified(true);
    

    【讨论】:

      【解决方案6】:

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

      MenuItemCompat.collapseActionView(menuItem);
      

      【讨论】:

        【解决方案7】:

        这对我有用searchMenuItem.collapseActionView();

        【讨论】:

          【解决方案8】:
          searchView.setIconified(true); // Call this twice
          searchView.setIconified(true);
          

          它对我有用。

          【讨论】:

          【解决方案9】:

          根据最新的documentationsource code返回false应该已经足够了ifficonifiedByDefault == true

          您是否曾定义过iconifiedByDefault="false" 或称为setIconifiedByDefault(false)

          【讨论】:

            【解决方案10】:

            我已将“开始”按钮更改为“下一步”,因此唯一对我有用的方法(在 API 19 上)是键入 closeBtn.performClick(); closeBtn.performClick();AutoCompleteTextViewOnEditorActionListener 中(单击“关闭”按钮两次)。 你可以像这样得到AutoCompleteTextView

            LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
            LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
            LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
            AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
            

            【讨论】:

              猜你喜欢
              • 2018-08-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-12-03
              • 2016-04-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多