2011-03-25 2 views
0

다음을 시도합니다 (코드는 주요 활동에 있습니다).안드로이드에서 ASyncTask에서 메뉴 항목을 해제하는 방법?

private MenuItem mainMenuSync = null; 

public void onCreate(Bundle savedInstanceState) { 
    ... 
    mainMenuSync = (MenuItem) findViewById(R.id.main_menu_sync); 
} 

private class Synchronize extends AsyncTask<Void, Void, Void> { 
    ... 

    @Override 
    protected void onPreExecute() { 
    mainMenuSync.setEnabled(false); 
    } 

그러나 실패합니다. 내가 뭘 잘못하고 있니? (이 메뉴 항목은 실제로이 ASyncTask를 시작하고 다시 시작하지 않으려합니다.)

답변

4

mainMenuSync은 메인 메뉴에서 나오므로 onCreateOptionsMenu에서 생성하는 것 같지 않습니까?

그럴 경우 해당 값을 onCreate으로 채우면 아무 효과가 없습니다. 그 순간까지 메인 메뉴가 XML에서 팽창하지 않았기 때문에 화면에 아무것도 표시되지 않을 때 이미 FC로되어 있어야합니다.

메인 메뉴는 Android의 다른 UI 항목과 같지 않습니다. 대부분의 경우 사용 빈도는 onCreateOptionsMenu이며 다시 사용하려면 onPrepareOptionsMenu입니다. 당신이 할 수있는 것은 플래그가 해당 항목을 활성화/비활성화 선언하는 것입니다 : 물론 showMainMenuSync이 비동기 작업으로 변경해야

boolean showMainMenuSync = true; 

onPrepareOptionsMenu(Menu menu){ 
    super.onPrepareOptionsMenu(menu); 
    menu.findItem(R.id.main_menu_sync).setEnabled(showMainMenuSync); 
} 

.

+0

감사합니다. @xandy. 그것은 완벽하게 작동합니다. –

관련 문제