2011-03-25 38 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