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 から拡張されていないためです。

メイン メニューは、Android の他の UI 項目と同じではありません。ほとんどのユース ケースでは、オンデマンドで拡張されonCreateOptionsMenu、次に で再利用されonPrepareOptionsMenuます。あなたができることは、そのアイテムを有効/無効にするフラグを宣言することです:

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 に答える