无论在ACtionBar中单击了哪个项目,ActionBar.OnNavigationListener都会触发

时间:2014-08-28 10:32:14

标签: android android-actionbar

我有问题。 我有一个动作栏。它有一个下拉列表,它有一个溢出按钮和另一个按钮,介于两者之间。

因为我使用了下拉菜单,所以我将操作栏设置为使用此模式:

 mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        mActionBar.setListNavigationCallbacks(mActionBarNavigationAdapter, mOnNavigationListener);
        mActionBar.setDisplayShowTitleEnabled(false);

我的mOnNavifationListener设置为根据我在下拉列表中选择的项目来调用REST api。 这是例外。

问题是,如果我点击溢出按钮以显示额外选项(例如设置或更重要的是,Signout),我仍然会激活导航侦听器。 所以我认为。好的,让我们尝试区分使用其位置或id的按钮,这些按钮在onNavigationItemSelected方法中作为参数传递。 所以我添加了一个检查位置参数的if语句。但... 看起来溢出按钮的位置也是0(完全类似于下拉列表中第一个项目的位置,所以它通过检查并调用REST api,这是不好的。 此外,第三个按钮(不是下拉列表或溢出)的位置为1,有效地调用其他REST API ...

我无法找到区分操作栏中​​项目的方法。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先,我强烈考虑更换您对列表导航的使用,因为这已在" L"开发者预览版应该会在Android的下一个发布版本中保持弃用状态。

  

我仍然启动了导航侦听器

我不清楚你的意思。我也不知道你指的是哪个动作栏:

  • 原生API级别11 +?
  • appcompat_v7
  • ActionBarSherlock?

理想情况下,当您的活动首次出现时,系统会调用onNavigationItemSelected(),如果用户选择Spinner中的内容,则会调用Spinner。如果你说它是在其他时间点被调用的,那么不幸的是,这可以通过简单地在你自己的数据成员中跟踪你在Spinner中的位置,并且只做工作来解决如果onNavigationItemSelected()位置实际发生了变化。因此,例如,如果你开始显示位置0,并且用户点击了导致{{1}}再次被调用位置0的东西,你知道没有什么需要改变,因为你仍然在位置0。