2011-03-25 1 views
0

Essayer de faire ce qui suit (le code est dans l'activité principale):Comment désactiver l'élément de menu de la ASyncTask sur android?

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); 
    } 

Mais il échoue. Qu'est ce que je fais mal? (Cet élément de menu commence vraiment ce AsyncTask et je voudrais éviter de le démarrer)

Répondre

4

Depuis votre mainMenuSync provient d'un menu principal, je suppose que vous créez dans onCreateOptionsMenu, non? Si c'est le cas, remplir sa valeur en utilisant onCreate n'aurait aucun effet, puisque à ce moment-là, votre menu principal n'est pas encore gonflé du xml, et je me demande si vous devriez déjà FC avant de voir quoi que ce soit sur l'écran.

Le menu principal n'est pas identique à un autre élément de l'interface utilisateur sous Android, qui, dans la plupart des cas, est gonflé à la demande en onCreateOptionsMenu et réutilisé ensuite en onPrepareOptionsMenu. Ce que vous pouvez faire est de déclarer un drapeau pour activer/désactiver cet élément:

boolean showMainMenuSync = true; 

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

qui bien sûr showMainMenuSync devrait changer votre tâche async.

+0

Merci, @xandy. Cela fonctionne parfaitement. –

Questions connexes