Странное меню настроек поведения в Android TabActivity
У меня есть TabActivity
с четырьмя вкладками (каждая из них имеет свою активность). Каждая вкладка определяет свою собственную onCreateOptionsMenu
(а в некоторых случаях onPrepareOptionsMenu
). Когда каждая вкладка загружена, AsyncTask
запускается для извлечения данных, необходимых для заполнения списка этой вкладки.
Если я переключаюсь между вкладками очень быстро (пока они все еще загружаются), а затем нажимаю кнопку меню (пока текущая вкладка AsyncApiTask
все еще работает), я могу получить неправильное меню параметров.
Например, скажем, FooActivity
(вкладка 1) имеет меню параметров с элементом "Обновить", и BarActivity
(вкладка 2) имеет меню параметров с элементом "Просмотреть все". Если я запускаю приложение (с активной вкладкой 1), быстро переключаюсь на вкладку 2 и затем нажимаю меню, иногда отображается элемент "Обновить" (а не ожидаемый элемент "Просмотреть все").
Кроме того, хотя это странное поведение иногда происходит только при первом нажатии меню (и последующие нажатия показывают правильные элементы), иногда оно "застревает", и неправильные элементы отображаются при каждом нажатии, пока я не переключаю вкладки.
Есть идеи, что может происходить? Я не слышал об этом раньше и не смог найти хороших предложений.
1 ответ
Да, предложение CommonsWare - лучшее решение! Вы можете даже рассмотреть возможность использования FragmentTabHost и фрагментов для каждой вкладки. Таким образом, активность хоста может обновлять меню опций централизованно из onTabChanged(String tab)
,
В то время как AsyncTask
порождается из Activity
, если он не побежал onPostExecute(...)
это все еще идет. Кроме того, так как поведение по умолчанию AsyncTask
s является переменной (разные версии Android запускают их последовательно / параллельно), трудно управлять без собственного ThreadPoolExecutor. Ваш быстрый Activity
переключение и повторение AsyncTask
кажется, блокирует.