2014-03-03 1 views
9

ViewPager이 포함 된 Activity의 간단한 코드가 있습니다. 내 Fragment 중 하나에서 메뉴에 몇 가지 메뉴 항목을 추가하려고하지만, 나는 이상한 행동을하고 있습니다. 내 조각에서 setHasOptionsMenu(true);을 호출하면 ViewPager의 조각을 변경할 때마다 액티비티의 onCreateOptionsMenu() 메서드가 호출됩니다. 이게 정상인가?프래그먼트에서 setHasOptionsMenu (true)를 호출하면 액티비티의 onCreateOptionsMenu에 대한 호출이 여러 번 발생합니다.

답변

16

절대적으로 "정상"입니다. 특정 유즈 케이스에 맞지 않을 수도 있지만 분명히 의도 된 동작입니다.

것은 android.support.v4.app.Fragment.setHasOptionsMenu()에 대한 소스를 살펴 보자 :

궁극적에 호출되는 onCreateOptionsMenu()에 이르게 활동의에 당신은 supportInvalidateOptionsMenu()를 호출 볼 수 있습니다
public void setHasOptionsMenu(boolean hasMenu) { 
    if (mHasMenu != hasMenu) { 
     mHasMenu = hasMenu; 
     if (isAdded() && !isHidden()) { 
      mActivity.supportInvalidateOptionsMenu(); 
     } 
    } 
} 

활동과 그것의 모든 파편입니다. 프레임 워크가 프래그먼트가 액티비티의 프래그먼트 매니저에 추가/제거 될 때 옵션 메뉴 업데이트를 관리하는 방법입니다.

+1

고마워, 지금은 나를 위해 인생을 어렵게 만들지 만 적어도 의도 된 행동이라는 것을 알고 있습니다. – facetoe

관련 문제