2014-09-18 1 views
4

내 앱에서 특정 일이 발생하면 새로 고침 버튼을 사용/사용 중지하려고하지만 알아낼 수없는 널 포인터 예외가 발생합니다. 상황에 따라 부울 addingRefresh 또는 removingRefresh을 true로 설정 한 다음 invalidateOptionsMenu()을 호출하여 단추를 사용하거나 사용하지 않도록 설정했지만 메뉴 항목은 null로 반환됩니다. 나는 이것이 왜있을 수 있지만 아무것도 찾을 수없는 이유에 대해 인터넷을 검색했습니다. (invalidateOptionsMenu()가 호출 될 때 호출) onCreateOptionsMenu()에 대한menu.findItem (R.id. *)이 null입니다. - Android

코드 어떤 도움

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    if (addingRefresh) { 
     //below line as well as other similar line cause exceptions 
     menu.findItem(R.id.action_refresh).setEnabled(true); 
     addingRefresh = false; 
    } else if (removingRefresh) { 
     menu.findItem(R.id.action_refresh).setEnabled(false); 
     removingRefresh = false; 
    } else if (addingLoading) { 

    } 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_activity_actions, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

감사합니다! 도움이

private MenuItem mMenuItem; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    final MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_activity_actions, menu); 
    mMenuItem = menu.findItem(R.id.action_refresh) 
    return true; 
} 

private void setMenuItemEnabled(boolean enabled) { 
    mMenuItem.setEnabled(enabled); 
} 

희망 :

+1

onPrepareOptionsMenu()를 팽창 후

menu.findItem(R.id.menuId); 

를 사용해야합니다 가 호출된다; onCreateOptionsMenu()는 한 번만 호출됩니다. –

+0

또한 항목을 찾으려고하면 메뉴가 팽창합니다. 그것은 좋을 수 없다. 1 초, 그리고 나는 더 철저한 대답을 게시 할 것이다. –

+0

onCreateOptionsMene()에서 정확한 시간에 해당 코드 행을 실행 했으므로 어떻게 든 호출되어야합니다 ... onPrepareOptionsMenu()를 사용하려고합니다 감사합니다! – ravensgo

답변

3

다음은 달성 하려는지에 대한 몇 가지 정리 코드입니다!

+0

@ravensgo 좋아요! 해피 코딩! –

2

의심의 여지를 없애기 위해서입니다. invalidateOptionsMenu()가 호출 될 때 메뉴

관련 문제