2011-03-25 44 views
0

試圖做到以下幾點(代碼在主要活動):如何禁用Android上的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中重複使用。你可以做的是聲明一個標誌來啓用/禁用項目:

boolean showMainMenuSync = true; 

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

這當然showMainMenuSync應該由你的異步任務會改變。

+0

謝謝@xandy。它完美的作品。 – 2011-03-26 07:32:47