Как отключить пункт меню из ASyncTask на андроид? - PullRequest
0 голосов
/ 26 марта 2011

Попытка сделать следующее (код входит в основной вид деятельности):

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 Ответ

4 голосов
/ 26 марта 2011

Поскольку ваш mainMenuSync поступает из главного меню, я полагаю, вы создаете его в onCreateOptionsMenu, не так ли?

Если это так, заполнение его значения с помощью onCreate не будет иметь значенияэффект, так как к тому моменту ваше главное меню еще не раздуто из xml, и мне интересно, что вы должны уже FC, прежде чем видеть что-либо на экране.

Главное меню отличается от других элементов пользовательского интерфейса в Android, которые в большинстве случаев раздуваются по требованию в onCreateOptionsMenu и повторно используются в onPrepareOptionsMenu.Что вы можете сделать, это объявить флаг для включения / выключения этого элемента:

boolean showMainMenuSync = true;

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

, который, конечно, showMainMenuSync должен быть изменен вашей асинхронной задачей.

...