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

나는 해당 게시물에서 모양과 내가 위의 내 코드에 어떤 다른 찾을 수 없습니다, 당신은 어떤 스턱을 실례를 도와주세요 수 있습니다 지금. – Sam

+0

'offer_menu.xml'과'settings_menu.xml '이 같지 않은지 다시 한번 확인하십시오. –

+0

offer_menu.xml에는 하나의 메뉴 항목이 있고 settings_menu.xml 메뉴에는 두 개의 메뉴 항목이 있습니다. 둘 다 동일하지 않습니다; ( – Sam

답변

1

입니다. 다른 활동과 상호 작용하면 옵션 메뉴가 활성화됩니다.

당신은 문자열 ID를 사용하여 필요로하는 활동을 검색하십시오 :

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

이 옵션을 시도한 것은 두 번째 활동을 호출하지 않는 것처럼 보입니다. "onCreateOptionsMenu "방법.이 아이디어에 대한 어떤 생각이든 – Sam

+0

LocalActivityManager에서 반환되는 활동의 이름을 확인하십시오. 원하는 활동의 이름을 본 적이 있습니까? – jsmith

+0

예, 현재 활동 이름을 기록하기 위해 기록 된 메시지를 추가 했으므로 원하는 인쇄물이 있습니다. 액티비티 이름 내 자식 작업에서 올바른 "onPrepareOptionsMenu"메서드를 호출하는 것을 볼 수 있습니다 .두 번째 액티비티가 "onCreateOptionsMenu"메서드가 아닌 "onPrepareOptionsMenu"메서드를 호출 할 때 만들어지는 것을 볼 수 있습니다. 두 번째 활동의 첫 번째 활동 메뉴도 있습니다. 활동 그룹의 하위 활동이 메뉴를 만들 때 내 qustion이 이제는 다른 하위 활동의 ​​ "onCreateOptionsMenu"메소드가 호출되지 않음을 의미합니까? – Sam

관련 문제