2015-02-01 9 views
1

메뉴 항목의 클릭 이벤트 중에 동적으로 메뉴 항목을 변경해야합니다.onprepareoptionsmenu가 기본적으로 호출되었습니다.

그래서 onOptionsItemSelected을 활동에 구현했습니다.

public class ResultActivity extends Activity { 

@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_actions, menu); 
     return true; 
    } 
} 

와 내가 에게 invalidateOptionsMenu를 호출하고있어이 어떤 inturn 또한 onPrepareOptionsMenu

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    switch (id){ 
      case R.id.action_group: { 
       invalidateOptionsMenu(); 
       break; 
      } 
       } 
} 

를 호출해야 방법을 onOptionsItemSelected, 나는 onPrepareOptionsMenu 방식의 메뉴에서 한 항목을 제거하는 것을 시도하고있다 .

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 


     Log.d(TAG,"In onPrepareOptionsMenu"); 
     menu.removeItem(R.id.action_group); 
     Log.d(TAG,"Group icon is removed"); 

     return super.onPrepareOptionsMenu(menu); 
    } 

문제는 해당 메뉴 항목을 클릭 할 때까지 기다리지 말고 활동 시작 중에 항목이 삭제된다는 것입니다.

사람은 문제가 onPrepareOptionsMenu(Menu)은 언제든지 메뉴를 표시하거나 재로드 할 필요가 어쨌든 호출되는 것입니다 .. 문제가 무엇인지 TIA

답변

1

을 알 수 있습니다. 여기에는 invalidateOptionsMenu()에서 온 통화뿐만 아니라 생성되는 활동도 포함됩니다.

예를 들어 실제로 항목을 제거하기 전에 부울 상태를 확인할 수 있습니다.

public boolean mRemoveItem; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
int id = item.getItemId(); 
switch (id){ 
     case R.id.action_group: { 
      mRemoveItem = true; 
      invalidateOptionsMenu(); 
      break; 
      } 
      } 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    if (mRemoveItem) { 
    menu.removeItem(R.id.action_group); 
    } 
    return super.onPrepareOptionsMenu(menu); 
} 

사용자의 필요에 따라, 당신은 당신의 코드에서 어떤 점에서 다시 false-mRemoveItem를 설정해야합니다.