0

这是一个影响 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);
   }
4

2 回答 2

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

}

在你的两个片段中尝试它。

于 2013-01-30T20:26:13.913 回答
0

与其检测何时选择了第二个选项卡,不如使用延迟后的方法在 Activity 的 onCreate 中以编程方式切换片段。例如,我有 3 个片段,我以相反的顺序(2、1、0)切换它们,它会在 Activity 开始时用漂亮的动画欺骗你的用户:

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);
}
于 2013-05-12T11:56:27.057 回答