2012-02-29 10 views
3

onPrepareOptionsMenuを使用してメニュー項目を追加すると、メニュー項目はアクションバーに自分自身を複製します。私は、フラグメントを使用して、このような主な活動でアクションバーの最初のメニューを作成しています:onPrepareOptionsMenu ActionBar内の項目を複製します

... 
@Override 
    public boolean onCreateOptionsMenu(Menu paramMenu) { 
    super.onCreateOptionsMenu(paramMenu); 
    paramMenu.add(0, 1, 0, "DashBoard").setIcon(R.drawable.ic_dashboard) 
     .setShowAsAction(1); 
    return true; 
    } 

次のように私は、その後のフラグメントのいずれかで別の項目を追加している:

... 
@Override 
    public void onPrepareOptionsMenu(Menu paramMenu) { 
    paramMenu.add(0, 2, 1, "FullScreen").setIcon(R.drawable.ic_fullscreen) 
     .setShowAsAction(1); 
    } 

のためにフラグメントクラスを介してこのアイテムを追加した何らかの理由が2回表示されます....私は何か問題がありますか?

私が間違って持っているものにすべてのヘルプは、あなたがそれを2回追加しているので、アイテムはおそらく2つ表示される

答えて

3

を理解されるであろう。 docs for onPrepareOptionsMenu

これは、表示されるたびにメニューが表示される直前に呼び出されます。

私は実際にonPrepareOptionsMenuに盲目的に項目を追加しませんでした。すでに追加されているかどうかを確認する必要があります。

+0

他の場所には追加されません。特定のフラグメントが追加された場合にのみ追加されます。 paramMenu.add(0、2、1、 "FullScreen")という行をコメントアウトすると、setIcon(R.drawable.ic_fullscreen) .setShowAsAction(1);が返されます。 、アイテムが期待どおりに表示されません。 – CelticParser

+0

ああ、これらはアプリケーション内の唯一の2つのメニュー項目です – CelticParser

+0

他にはどこにも追加されていませんが、 'onPrepareOptionsMenu'は2回呼び出されています... – kabuko

12

onPrepareOptionsMenuメニューが表示されるたびに呼び出されます。

onPrepareOptionsMenu()に入力し、新しいメニュー項目を追加します。

+0

問題を解決しました。 – jkau

-1

私はアクティビティ内でフラグメントを使用しています。それらを切り替えるにはスワイプを使用します。私の主なアクティビティにはいくつかのメニュー項目がありますが、私はフラグメントを使用して、実行時にフラグメントを動的に追加します。下図のように私のfragamentのoncreateOptions方法は次のとおりです。メニュー項目は別の可能性のある問題を修正する修正プログラムをinstancestateバンドルがnullの場合にのみ、あなたはので、あなたの活動は、でしょう、その後で、あなたの活動に断片を追加できるということです一度だけ

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     //menu.clear(); 
     if(menu.size() == 1) { 
      // inflater.inflate(R.menu.dashboard_main,menu); 
      MenuItem mit = menu.add("Refresh"); 
      mit.setIcon(android.R.drawable.stat_notify_sync); 
      mit.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     } 
    } 

今表示されますフラグメントを破棄したため、メニュー項目で再作成する必要があります。

関連する問題