夏洛克选项菜单项没有响应



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

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

看起来这是一个已知问题。 在此处查看讨论。

我现在的解决方法是首次选择第二个选项卡时检测,并以编程方式切换回第一个选项卡。 这会强制用户再次选择第二个选项卡,但从那时起,只要用户留在该活动中,它就可以正常工作。

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

第一个片段:

  @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);
   }

尝试在片段中充气之前清除菜单。所以在你的片段中 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);

}

在两个片段中尝试一下。

不要检测何时选择了第二个选项卡,而是使用发布延迟方法在 onCreate of Activity 中以编程方式切换片段。例如,我有 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);
}

最新更新