0

これは、3.0より前のプラットフォームに影響する問題です。つまり、Sherlockがアクションバーのメニュー項目を提供するプロキシとして機能する場合です。

2つのフラグメントを含むフラグメントアクティビティがあり、それぞれに独自のオプションメニューのセットがあります。アクティビティが開始されると、最初のフラグメントタブが表示され、そのメニュー項目は正常に機能します。ただし、最初に他のタブに切り替えると、そのメニュー項目が応答しません。最初のタブに戻ってもう一方のタブをもう一度選択すると、正常に起動し始めます。

これは既知の問題のようです。こちらのディスカッションをご覧ください。

今のところ私の回避策は、2番目のタブが最初に選択されたことを検出し、プログラムで最初のタブに戻すことです。これにより、ユーザーは2番目のタブを再度選択する必要がありますが、その時点から、ユーザーがそのアクティビティに留まっている限り、通常どおり機能します。

他の誰かがこの問題のよりエレガントな解決策を見つけたかどうか疑問に思います。ありがとう!

最初のフラグメント:

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

2番目のフラグメント:

   @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

2番目のタブが選択されたことを検出する代わりに、遅延後の方法を使用して、アクティビティの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);
}
于 2013-05-12T11:56:27.057 に答える