2014-08-28 33 views
0

哪个项目我有一个问题。 我有一个操作栏。它有一个下拉列表,它有一个溢出按钮,另一个按钮位于中间。ActionBar.OnNavigationListener火灾无论中被点选动作条

因为我使用了一个下拉,我设置了操作栏使用此模式:

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 ...

我不能找到一种方法,在操作栏中的项目区别开来。

有什么建议?

回答

0

首先,我会认真考虑更换您的列表导航的使用,因为这是正式在“L”开发者预览版已过时,应在次继续弃用e下一个Android版本。

我仍然得到导航听者激活

我不是你所说的这是什么不清楚。我也不知道你指的是哪个动作栏:

  • native API Level 11+?
  • appcompat_v7
  • ActionBarSherlock?

理想的情况下,当你的活动第一次出现onNavigationItemSelected()将被调用,那么如果用户选择从Spinner东西。如果你说,这是被称为在其他时间点,而不幸的是,这可以围绕通过简单地跟踪,在你自己的数据成员,你在Spinner其中,只有做功的工作,如果Spinner位置实际上已经改变。因此,例如,如果您开始显示位置0,并且用户点击导致onNavigationItemSelected()再次被调用的位置为0,那么您知道没有什么需要更改,因为您仍位于位置0.

+0

谢谢您很多为您的答案! 我正在使用appcompat_v7。通过“我仍然让导航侦听器激活”我的意思是,无论我在ActionBar中单击哪个项目,是下拉列表还是溢出按钮或其中的任何其他按钮,导航侦听器都会被调用,因此,里面的实现被执行,最终导致REST API调用。我试图找到一种方法来区分所有的按钮。目前,他们都会在i和l中返回0或1(我在onNavigationItemSelected中获得的参数(int i,long l)。 – 2014-08-30 11:43:18

+0

但是您提出的作为解决方案的建议可能正是我需要的。实施它。谢谢! Btw我注册到您的高级行动酒吧技术网络研讨会。真的很期待它:) – 2014-08-30 11:54:36