尝试执行以下操作(代码在主要活动中):
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,我想避免再次启动它)
答案 0 :(得分: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
应该由您的异步任务更改。