Sherlock选项菜单项没有响应

时间:2013-01-28 01:33:17

标签: android actionbarsherlock

这是影响3.0之前的平台的问题,即当Sherlock充当代理以提供操作栏菜单项时。

我有一个片段活动,其中包含两个片段,每个片段都有自己的一组选项菜单。活动开始时,将显示第一个片段选项卡,其菜单项正常工作。但是,第一次切换到其他选项卡时,其菜单项不响应。如果我切换回第一个标签并再次选择另一个标签,它们就会开始正常启动。

看起来这是一个已知问题。查看讨论here

我现在的解决方法是第一次选择第二个选项卡并以编程方式切换回第一个选项卡。这会强制用户再次选择第二个标签,但只要用户保持该活动,就可以从该点开始正常工作。

我想知道是否有其他人找到了更优雅的解决方案。谢谢!

第一个片段:

  @Override
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
      moveMenuItem   = menu.add(Flashum.MENU_GROUP_MULTI, Flashum.MOVE_FLASHES_ID, 0, R.string.move_flashes);
      cloneMenuItem  = menu.add(Flashum.MENU_GROUP_MULTI, Flashum.CLONE_FLASHES_ID, 0, R.string.clone_flashes);
      deleteMenuItem = menu.add(Flashum.MENU_GROUP_MULTI, Flashum.DELETE_FLASHES_ID, 0, R.string.delete_flashes);
      moveMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      moveMenuItem.setIcon(R.drawable.move2red);
      cloneMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      cloneMenuItem.setIcon(R.drawable.hard_drive_clone);
      deleteMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      deleteMenuItem.setIcon(R.drawable.delete);
   }

第二片段:

   @Override
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
      saveMenuItem = menu.add(Flashum.MENU_GROUP_SAVE, Flashum.SAVE_CHANGES_ID, 0, R.string.save_changes);
      saveMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      saveMenuItem.setIcon(R.drawable.save);
      menu.setGroupVisible(Flashum.MENU_GROUP_SAVE, true);

      recMenuItem = menu.add(Flashum.MENU_GROUP_REC, Flashum.RECORD_ID, 0, R.string.record);
      recMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
      recMenuItem.setIcon(R.drawable.microphonehot);
   }

2 个答案:

答案 0 :(得分:1)

尝试清除菜单,然后再在碎片中充气。所以在onCreateOptionsMenu方法的片段中调用menu.clear();在开始,然后膨胀你的菜单。 像这样:

   @Override
  public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

  super.onCreateOptionsMenu(menu, inflater); 
  menu.clear();

  saveMenuItem = menu.add(Flashum.MENU_GROUP_SAVE, Flashum.SAVE_CHANGES_ID, 0, R.string.save_changes);
  saveMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
  saveMenuItem.setIcon(R.drawable.save);
  menu.setGroupVisible(Flashum.MENU_GROUP_SAVE, true);

  recMenuItem = menu.add(Flashum.MENU_GROUP_REC, Flashum.RECORD_ID, 0, R.string.record);
  recMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
  recMenuItem.setIcon(R.drawable.microphonehot);

}

在两个片段中尝试。

答案 1 :(得分:0)

不使用检测选择第二个选项卡的时间,而是使用后延迟方法以编程方式在活动的onCreate中切换片段。例如,我有3个片段,我以相反的顺序(2,1,0)切换它们,它在活动开始时用一个很好的动画来欺骗你的用户:

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB){
  mIndicator.setCurrentItem(2);
  mIndicator.postDelayed(new Runnable() {
public void run() {
  mIndicator.setCurrentItem(1);
  mIndicator.postDelayed(new Runnable() {
    public void run() {
      mIndicator.setCurrentItem(0);
  }}, 100);
}}, 100);
}