2012-02-14 127 views
0

我使用的ActivityGroup一個問題。我有兩個ActivityGroup內的活動,他們都使用菜單(覆蓋onCreateOptionMenu和onOptionsItemSelected)。Android的活動組 - 第二活動始終顯示第一個活動菜單

兩個活動有不同的菜單。

好了,問題是,第二活動始終顯示第一個活動菜單,

有關此問題的任何想法?

下面是我的代碼

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 2012-02-14 13:27:33

+0

仔細檢查'offer_menu.xml'和'settings_menu.xml'是不一樣的。 – 2012-02-14 13:42:41

+0

offer_menu.xml有一個菜單項,settings_menu.xml菜單有兩個菜單項。兩者都是不相同的;( – Sam 2012-02-14 13:53:42

回答

1

當您添加活動,「當前」活動是最後一個加入。我懷疑,如果你與其他活動互動,然後激活它將工作的選項菜單。

嘗試獲取你需要用字符串ID的活動:

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

試過這個選項爲好,好像它不調用第二個活動「onCreateOptionsMenu 「法。在這 – Sam 2012-02-14 14:10:44

+0

任何想法檢查活動的名稱由LocalActivityManager返回。你還會看到所期望的活動的名稱? – jsmith 2012-02-14 14:55:28

+0

是的,我添加登錄信息登錄當前活動的名稱和它的打印期望活動名稱。 我可以看到我們做調用正確的「onPrepareOptionsMenu」法在我的孩子的活動。 什麼,我看到的是我的第二個活動創建它變得呼叫「onPrepareOptionsMenu」,而不是「onCreateOptionsMenu」方法時。這就是爲什麼我得到第二個活動中的第一個活動菜單也是 我qustion現在,當在活動組子活動創建一個菜單,這是否意味着其他子活動的 「onCreateOptionsMenu」方法不會被調用???。 – Sam 2012-02-14 18:20:35

相關問題