如何拦截ActionBarSherlock中“Up”(主页按钮)按钮的单击?

时间:2012-07-31 12:49:22

标签: android android-actionbar actionbarsherlock android-menu

我使用 ActionBar Sherlock 为我的某个项目实现了搜索功能。所以现在我在ActionBar上有搜索编辑文本,就像官方AB sherlock项目仓库的样本一样(在github上):Collapsible action items

我的搜索编辑文本正在过滤活动中的ListView。当用户开始输入某些字符时,ListView会被过滤掉。我是通过将textWatcher添加到搜索编辑文本中来完成的,如下所示:

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, SEARCH_ACTION_MENU, 0, "Search")
        .setIcon(R.drawable.ic_search)
        .setActionView(R.layout.search_edittext)
        .setShowAsAction(
            MenuItem.SHOW_AS_ACTION_ALWAYS
                | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    /** We get a reference to the search edit */
    MenuItemWrapper menuItemWrapper = (MenuItemWrapper) menu.getItem(0);
    final EditText searchEdit = (EditText) menuItemWrapper.getActionView();
    /** We add a listener search filter listener */
    searchEdit.addTextChangedListener(filterWatcher); // filterwatcher is a textWatcher
    return true;
  }

当我点击搜索图标时,会显示搜索编辑文本,用户可以开始输入内容。此外,主页按钮显示为“向上主页按钮”(使用向左箭头)。

单击此箭头将使搜索文本视图消失,但如果用户已经开始输入内容,则列表视图将被过滤,并且在用户单击后不再显示搜索文本视图时不会重置列表视图主页“向上”按钮。

我的问题是:如何拦截点击“向上”按钮重置我的列表视图?我认为这是我重置列表的唯一方法。

我已经尝试过了:

@Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case android.R.id.home:
        Log.d(Constants.LOG_TAG, "Home button clicked");
        return true;

      default:
        return super.onOptionsItemSelected(item);
    }
  }

当“主页按钮”显示为“向上”按钮时,它不起作用。

任何帮助将不胜感激。

提前感谢,

2 个答案:

答案 0 :(得分:2)

您需要在视图上实施CollapsibleActionView才能收到onActionViewCollapsed()回调。

您还应该升级到dev分支上的ActionBarSherlock版本,因为它在本机操作栏上使用时可以对可折叠操作项进行重要修复。

答案 1 :(得分:0)

它应该与onOptionsItemSelected一起使用。

确保您使用的是com.actionbarsherlock.view.MenuItem

您也可以以同样的方式使用onMenuItemSelected(int featureId, MenuItem item)