2012-05-14 2 views
34

내 활동의 일부 방법에서 나는 메뉴의 제목을 확인하거나 체크 여부를 알고 싶다. 활동 메뉴는 어떻게 얻을 수 있습니까? 나는 비슷한 것을 필요로한다 this.getMenu()내 활동의 옵션 메뉴는 어떻게받을 수 있습니까?

+1

"이름"과 "선택됨"? 나는 그것을 얻지 않는다. 이드와 환경 설정? – keyser

+0

옵션 메뉴에 대해 이야기하고 있습니까? "public boolean onCreateOptionsMenu (메뉴 메뉴)"에서 생성 된 것과 비슷합니까? – MikeIsrael

+0

yes 옵션 메뉴 – breceivemail

답변

90

invalidateOptionsMenu()을 경계하십시오. 전체 메뉴를 다시 만듭니다. 이것은 오버 헤드가 많으며 SearchView과 같은 내장 된 구성 요소를 재설정합니다. 내 SearchView이 "임의로"닫히는 이유를 추적하는 데 꽤 시간이 걸렸습니다.

어둠에 게시 된 메뉴 캡처가 끝나고 필요에 따라 onPrepareOptionsMenu(Menu)으로 전화하십시오. 이것은 불쾌한 부작용없이 내 요구 사항을 충족 시켰습니다. Gotcha : 메뉴가 생성되기 전에 onPrepareOptionsMenu()으로 전화 할 경우를 대비하여 null 체크를해야합니다. 나는 이것을 아래와 같이했다 :

private Menu mOptionsMenu; 

@Override 
public boolean onCreateOptionsMenu(final Menu menu) { 
    mOptionsMenu = menu 
    ... 
} 

private void updateOptionsMenu() { 
    if (mOptionsMenu != null) { 
     onPrepareOptionsMenu(mOptionsMenu); 
    } 
} 
+6

이것은 좋은 대답이며 50 세까지 도달하는 데 도움을 드리고 싶습니다. :-) –

+0

왠지 대답합니다. 어떤 메뉴에서 어떤 메뉴를 onPrepareOptionsMenu) 내 서비스가 시작될 때만 발생하는 조건 등에 따라 변경하고 싶었 기 때문에어쨌든 –

+0

'invalidateOptionsMenu()'를 사용하면 오버 헤드가 너무 많고 눈에 띄는 점에 동의 할 것입니다. 나는 적은 솔루션을 사용하기 위해이 솔루션을 선호합니다. –

1

매개 변수로 메뉴를 제공하는 몇 가지 콜백 메소드가있다.

거기서 조작하고 싶을 수도 있습니다. 당신이 활동 설명서를 살펴보고 원하는 방법을 찾아 최선의

onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 
onCreateOptionsMenu(Menu menu) 
onCreatePanelMenu(int featureId, Menu menu) 

보다가 몇 : 이

+0

의 솔루션 값이 최신이 아님 – breceivemail

+0

정확한 behaivior를 모르지만 필드 변수에 참조를 저장한다고 생각하십니까? 좋아요 : onCreateOptionsMenu (메뉴 메뉴) {this.menu = menu. . . . 나중에 제목을 묻는 질문에 액세스 할 수 있습니까? – Ostkontentitan

1
는 지금까지 내가 이해할 수 있기 때문에 당신이 여기에 원하는 것은

http://developer.android.com/reference/android/app/Activity.html 예를 들어

어떤 도움이 될 수 있습니다 :

이 자습서는 option menu을 참조하십시오.

2. 사용자가 메뉴 버튼을 누를 때마다 getTitle()을 통해 제목을 확인할 수 있습니다.

3. 또는 사용자가 메뉴 버튼을 누르지 않았을 때 선택 또는 확인 된 마지막 메뉴 항목을 알고 싶으면 사용자가을 누르면 환경 설정을 저장해야합니다.

11

대신 주위 메뉴 객체를 전달하는 액티비티 클래스

public class MainActivity extends Activity 
{ 
    ... 
    ... 
    private Menu _menu = null; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     _menu = menu; 
     return true; 
    } 

    private Menu getMenu() 
    { 
     //use it like this 
     return _menu; 
    } 
} 
+1

전화 invalidateOptionsMenu()가 더 좋습니다! onPrepareOptionsMenu (메뉴 메뉴) 메서드에서 업데이트를 제공하면됩니다. – AntoineP

27

전화 invalidateOptionsMenu()에 메뉴 객체를 전달하여 그것을 할 수 있습니다.

+4

불행히도 API 레벨 11에 추가되었습니다. ( – greg7gkb

관련 문제