2012-10-14 4 views
9

메뉴 항목을 숨기거나 표시하기 위해 onPrepareOptionsMenu를 재정의했습니다. API 레벨 16 에뮬레이터로 테스트 할 때; 메뉴를 처음 열 때 onPrepareOptionsMenu가 호출되지 않습니다. 그러나 메뉴를 다시 열면 작동합니다. 문제는 첫 번째 사용에만 있습니다. 이것으로 간단하게 테스트 할 수 있습니다.젤리 빈은 메뉴를 처음 열 때 onPrepareOptionsMenu()를 호출하지 않습니다.

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    Toast.makeText(this.getActivity(), "pre", Toast.LENGTH_SHORT).show(); 
    super.onPrepareOptionsMenu(menu); 
} 

아이디어가 있으십니까?

답변

17

onPrepareOptionsMenu()은 사용자가 진저 빵과 그 아래에서 메뉴를 열 때마다 호출됩니다. Honeycomb에서 Options 메뉴 위로 올라가면 항목이 ActionBar에있을 때 항상 열려 있다고 가정합니다.

활동 라이프 사이클 중 옵션 메뉴를 업데이트하려면 onPrepareOptionsMenu() 콜백 내에서 invalidateOptionsMenu()으로 전화하여 onPrepareOptionsMenu()으로 전화해야합니다.

onCreateOptionsMenu() 콜백에서 첫 번째 사용을위한 코드를 구현할 수 있습니까? 옵션 메뉴가 생성되고 처음 사용될 때마다 호출됩니다.

+0

invalidateOptionsMenu worked. thx – syloc

+0

어디에서 전화할까요? – Skynet

+0

귀하의 활동에서. – IKavanagh

5

그것은 안드로이드 버그 : https://code.google.com/p/android/issues/detail?id=24231

당신이 지원 라이브러리를 사용하는 경우는 처음 메뉴 버튼을 눌러, invalidateOptionsMenu() 또는 supportInvalidateOptionsMenu()를 호출 할 때.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch(keyCode) { 
    case KeyEvent.KEYCODE_MENU: 
     if(mIsMenuFirstClick) { 
      mIsMenuFirstClick = false; 
      supportInvalidateOptionsMenu(); 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+2

아름답게 작동합니다, 감사합니다! 경우에 따라 'ActivityCompat.invalidateOptionsMenu (this);'여야합니다. – zelanix