2009-12-16 3 views
1

android에서이 메뉴 항목을 만듭니다. 나는 모든 메뉴 항목 (하지의 onCreateOptionsMenu에, 내 활동에 코드의 다른 부분에서() 메소드 자체를) programmically하지 않도록 설정하는 방법내 활동의 모든 메뉴 항목을 프로그래밍 방식으로 사용 중지하려면 어떻게해야합니까?

public boolean onCreateOptionsMenu(Menu menu) { 

     menu.add(0, 0, 0, "Menu1"); 
     menu.add(0, 1, 0, "Menu2"); 
     return true; 
} 

?

감사합니다.

답변

6

add은 변수에 저장할 수있는 MenuItem (Menu 개체에서 검색 할 수도 있음)을 반환합니다.

MenuItem menu1; 

public boolean onCreateOptionsMenu(Menu menu) { 
    menu1 = menu.add(0, 0, 0, "Menu1"); 
} 

public void someOtherMethod() { 
    if(menu1 != null) { 
     // if it's null, options menu hasn't been created, so nevermind 
     menu1.setEnabled(false); 
    } 
} 
+0

을 ... 변경

public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); for(int i=0; i<menu.size(); i++){ menu.getItem(i).setEnabled(isMenuEnabled); } } 

및 invalidateOptionsMenu을 (전화) 메뉴 항목? 그룹을 사용하면 항목을 활성화/비활성화 할 때 훨씬 더 효율적으로 작업 할 수 있으며 MenuItem을 사용하지 않아도됩니다. –

+0

나는 동의한다, 나는 어떻게 든 그 게시물을 하나의 아이템에 관해서 오독했다. (제목과 본문 모두에 * all *이 있지만, hrrm). 내가 너에게 +1했는데, 네가 분명히 더 효율적인 방법이다. –

7

당신은 사용하지 않도록 설정의 groupId를 사용할 수는/menu.setGroupEnabled()를 사용하여 한 번에 모든 메뉴 항목을, 수 있습니다. 당신이 그룹 0에 항목을 추가하기 때문에 그래서 예를 들어, 당신은 할 줄 :

또한
menu.setGroupEnabled(0, false); 

동적으로 메뉴를 수정하려면, 당신은 onPrepareOptionsMenu()에 후크해야한다. onCreateOptionsMenu()은 액티비티 당 한 번만 호출되므로 초기 메뉴 구조를 설정하는 것이 좋지만 나중에 액티비티의 필요에 따라 메뉴를 활성화/비활성화하는 데 onPrepareOptionsMenu()을 사용해야합니다.

5

사용하지 말아야하는 경우 (사용 중지하지 말고) 완전히 숨기는 것이 좋습니다. 이를 위해 내가 할 :

menu.clear(); 

하고 그것을 다시 :

invalidateOptionsMenu(); 

이것은 또한 조각에서 추가 메뉴 항목 작동합니다.

0

관련 여전히 경우 : 다음 isMenuEnabled 당신의 전체 무리있어 경우 어떻게 나에게 일을하는 어려운 길처럼 보인다

관련 문제