【问题标题】:Reset action bar after using SearchView使用 SearchView 后重置操作栏
【发布时间】:2012-05-02 18:58:32
【问题描述】:

我正在使用 SearchView 小部件在我的应用中启用搜索。在最初单击搜索图标后,SearchView 小部件会展开到搜索字段中,并且“返回”箭头显示在应用程序图标旁边。如果我单击应用程序图标,操作栏会恢复为初始状态(没有“返回”箭头),SearchView 会恢复为图标。

现在的问题:执行搜索后,操作栏没有改变,唯一的恢复方式是单击应用程序图标或手机的“返回”箭头。不好,因为我希望操作栏在搜索完成后进入初始状态。我试过SearchView.setIconofied(true),但有两个问题:

  1. 搜索图标与编辑字段显示在同一位置(最初位于最右侧)。
  2. 操作栏仍显示“返回”箭头。

我认为我面临的问题是偏离了常规导航模式。在我的情况下,一切都发生在同一个活动中(搜索结果显示在承载操作栏的同一个活动中),因此例如执行Activity.finish() 只会让应用退出。

如何触发操作栏的“后退一步”?还是模拟点击应用图标?

【问题讨论】:

    标签: android android-actionbar searchview


    【解决方案1】:

    听起来您已将其设置为 MenuItem 上的可折叠操作视图。您可以在该 MenuItem 实例上调用 collapseActionView() 以将其送回其关闭状态。

    【讨论】:

      【解决方案2】:

      collapseActionView() 方法仅适用于 API 级别 14。如果您希望支持早期版本的 android,那么您应该使用 MenuItemCompat 库。

      这是我折叠搜索视图并重置操作栏的解决方案...

      private MenuItem searchMenuItem;
      
      @Override
      public boolean onCreateOptionsMenu(Menu menu)
      {
          getMenuInflater().inflate(R.menu.main_menu, menu);
          SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
          searchMenuItem = menu.findItem(R.id.action_search);
          final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);
          searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
          searchView.setIconifiedByDefault(false);
      
          customizeSearchView(searchView);
      
          return super.onCreateOptionsMenu(menu);
      }
      
      
      
      
          @Override
      protected void onNewIntent(Intent intent)
      {
          setIntent(intent);
      
          if (searchMenuItem != null)
          {
              if (MenuItemCompat.expandActionView(searchMenuItem))
              {
                  MenuItemCompat.collapseActionView(searchMenuItem);
              }
              else if (MenuItemCompat.collapseActionView(searchMenuItem))
              {
                  MenuItemCompat.expandActionView(searchMenuItem);
              }
          }
      
          handleIntent(intent);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-16
        • 2015-03-17
        • 2012-07-16
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 2017-06-11
        相关资源
        最近更新 更多