2012-02-14 20 views
0

ActivityGroupを使用して1つの問題があります。 ActivityGroup内には2つのアクティビティがあり、どちらもメニューを使用します(onCreateOptionMenuとonOptionsItemSelectedをオーバーライドします)。Androidアクティビティグループ - 2番目のアクティビティは常に最初のアクティビティメニューを表示します

両方のアクティビティには異なるメニューがあります。

さて、問題は、この問題について

任意のアイデアは、第二の活動は、常に最初のアクティビティメニューを示すことがありますか?

以下

が私のコードである

public class myActivityGroup extends ActivityGroup { 

---- 

    public void startChildActivity(String Id, Intent intent) { 
     Window window = getLocalActivityManager().startActivity(Id, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
     if (window != null) { 
      mIdList.add(Id); 
      View view = window.getDecorView(); 
      history.add(view); 
      setContentView(view); 
     } 
    } 

     public void back() { 
     if (history.size() > 0) { 
      int lastActivityIndex = history.size() - 1; 
      int lastIDIndex = mIdList.size() - 1; 

      String activityId = mIdList.get(lastIDIndex); 
      Log.d(TAG, "activityId:" + activityId); 

      history.remove(lastActivityIndex); 
      mIdList.remove(lastIDIndex); 
      setContentView(history.get(history.size() - 1)); 
     } else { 
      finish(); 
     } 
    } 


@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     Activity current = getLocalActivityManager().getCurrentActivity(); 
     return current.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     LocalActivityManager manager = getLocalActivityManager(); 
     Activity current = manager.getCurrentActivity(); 
     return current.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     LocalActivityManager manager = getLocalActivityManager(); 
     Activity current = manager.getCurrentActivity(); 
     return current.onOptionsItemSelected(item); 
    } 
} 



public class ChildActivity1 extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //add menu here 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.settings_menu, menu); 
     return true; 
    } 

    @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
     //handle on menu item selected here 
     return true; 
    } 
} 



public class ChildActivity2 extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //add menu here 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.offer_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     //handle on menu item selected here 
     return true; 
    } 
} 
+0

私はその記事を見ていると私は上記の私のコードと何が違うのを見つけることができません、あなたが立ち往生me.i'm種類を助けてくださいすることができます今。 – Sam

+0

'offer_menu.xml'と' settings_menu.xml'が同じでないことをもう一度確認してください。 –

+0

offer_menu.xmlには1つのメニュー項目があり、settings_menu.xmlメニューには2つのメニュー項目があります。どちらも同じではありません;( – Sam

答えて

1

あなたが活動を追加すると、「現在」の活動は、最後の1が追加されていることです。私はあなたが他のアクティビティとやりとりすると、それが動作するオプションメニューをアクティブにすると思う。

すると、文字列IDを使用して必要なアクティビティを取得してみてください。

LocalActivityManager manager = getLocalActivityManager(); 
Activity a = manager.getActivity(id); 
return a.onCreateOptionsMenu(menu); 
+0

もこのオプションを試しました。 "onCreateOptionsMenu "方法。これについての任意のアイデア – Sam

+0

LocalActivityManagerによって返されているアクティビティの名前を確認しますか? – jsmith

+0

はい、私は現在のアクティビティ名を記録するログメッセージを追加しました。アクティビティ名。 子アクティビティで正しい "onPrepareOptionsMenu"メソッドを呼び出すのがわかります 2番目のアクティビティが作成されたときに、 "onCreateOptionsMenu"メソッドではなく "onPrepareOptionsMenu"メソッドが呼び出されました。 2番目のアクティビティの最初のアクティビティメニューも表示されます。 アクティビティグループ内の子アクティビティがメニューを作成すると、他の子アクティビティの "onCreateOptionsMenu"メソッドは呼び出されません。 – Sam

関連する問題