2012-01-27 4 views
35

그래서, 알고 싶습니다. 안드로이드에서 프로그래밍 방식으로 메뉴의 가시성을 어떻게 설정할 수 있습니까 ?? 이것은 내가 내 메뉴가 방법입니다프로그래밍 방식으로 메뉴의 가시성을 설정하십시오.

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item){ 
    switch (item.getItemId()){ 
     case R.id.menuregistrar: 
      break; 
     case R.id.menusalir: 
      break; 
    } 
    return true; 
} 

을하지만이 코드는에서 onCreate에없는, 그래서 프로그래밍 (내 경우에는 내가 원하는 하나 개의 항목 보이거나 보이지 않는 설정 "menuregistrar"하는 방법을 알고하지는 . 나는 영원히 내 응용 프로그램을 등록하고 나면 보이지 않는 것으로

답변

106

넣고이 방법 당신의 Activity

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem register = menu.findItem(R.id.menuregistrar);  
    if(userRegistered) 
    {   
     register.setVisible(false); 
    } 
    else 
    { 
     register.setVisible(true); 
    } 
    return true; 
} 

에 짧은 버전에서 당신은 쓸 수 :

MenuItem register = menu.findItem(R.id.menuregistrar);  
register.setVisible(!userRegistered); //userRegistered is boolean, pointing if the user has registered or not. 
return true; 
+0

1 ... – Lucifer

+2

두 팁 : 1.you 등록'작성하여 그 코드를 날씬하게 만들 수 있습니다. setVisible (userNotRegistered);'2. 부울 변수는 일반적으로 양수입니다. 즉'if (! userRegistered)'입니다. 'if (! UsersNotRegistered)'를 이해하기 어렵습니다 : 사용자가 등록되지 않았다면? –

+1

@ W.K.S가 동의 함. 코멘트 주셔서 감사합니다. –

2

public boolean onPrepareOptionsMenu (Menu menu)을 사용하면 메뉴 버튼을 누를 때마다 호출되어 귀하의 물건을 처리 할 때마다 호출됩니다. 다른 활동에서 oncreateoptionsmenu()를 사용하면 다른 메뉴를 부 풀릴 수 있습니다.이 메뉴는 한 번만 호출됩니다.

건배

+1

onPrepareOptionsMenu는 invalidateOptionsMenu를 호출 할 때마다 호출되기 때문에 두 번 이상 호출 될 수 있습니다. – javahead76

+0

@ javahead76이 호출은'Build.VERSION.SDK_INT> = 11' 인 경우에만 작동합니다. –

6

나는 다음과 같이 더욱 아딜의 솔루션을 단순화 것 :

좋은 답변
public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem registrar = menu.findItem(R.id.menuregistrar);  
    registrar.setVisible(!isRegistered); 
    return true; 
} 
+1

좋은데, 새로운 사용자는 급하게있어 문제가 빨리 풀리기를 원합니다. 거기에서 실제로 일어나고있는 것을 보여줍니다. :) –

+1

@AdilSoomro,이 코드는 대답이 아닌 간단하고 ("서둘러"더 편리하다) 원래 응답을 편집 할 것을 제안합니다. – Stan

관련 문제