如何从Android上的ASyncTask禁用菜单项?

时间:2011-03-25 21:28:12

标签: android android-ui android-asynctask android-menu

尝试执行以下操作(代码在主要活动中):

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,我想避免再次启动它)

1 个答案:

答案 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应该由您的异步任务更改。