0

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

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

1 回答 1

4

由于您mainMenuSync来自主菜单,我猜您是在 onCreateOptionsMenu 中创建它的,不是吗?

如果是这种情况,使用填充它的值onCreate不会有任何效果,因为到那时,你的主菜单还没有从 xml 中膨胀,我想知道你应该在看到屏幕上的任何内容之前已经 FC。

主菜单与 Android 中的其他 UI 项不同,在大多数用例中,它们onCreateOptionsMenuonPrepareOptionsMenu. 您可以做的是声明一个标志来启用/禁用该项目:

boolean showMainMenuSync = true;

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

这当然showMainMenuSync应该由你的异步任务改变。

于 2011-03-25T21:51:18.267 回答