2012-02-14 122 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

相关问题