Странное меню настроек поведения в Android TabActivity - PullRequest
5 голосов
/ 25 апреля 2010

У меня есть TabActivity с четырьмя вкладками (каждая из них имеет свою активность). Каждая вкладка определяет свой собственный onCreateOptionsMenu (а в некоторых случаях onPrepareOptionsMenu). Когда каждая вкладка загружена, AsyncTask запускается для получения данных, необходимых для заполнения списка этой вкладки.

Если я переключаюсь между вкладками очень быстро (пока они все еще загружаются), а затем нажимаю кнопку меню (пока текущая вкладка AsyncApiTask все еще работает), я могу отобразить меню неправильных опций.

Например, скажем, FooActivity (вкладка 1) имеет меню параметров с элементом «Обновить», а BarActivity (вкладка 2) имеет меню параметров с элементом «Просмотреть все». Если я запускаю приложение (с активной вкладкой 1), быстро переключаюсь на вкладку 2 и затем нажимаю меню, иногда отображается элемент «Обновить» (а не ожидаемый элемент «Просмотреть все»).

Кроме того, хотя это странное поведение иногда происходит только при первом нажатии меню (и последующие нажатия показывают правильные пункты), иногда оно «застревает», и неправильные элементы появляются при каждом нажатии, пока я не переключаю вкладки. *

Есть идеи, что может происходить? Я не слышал об этом раньше и не смог найти хороших предложений.

1 Ответ

0 голосов
/ 18 сентября 2013

Да, предложение CommonsWare - лучшее решение! Вы даже можете рассмотреть возможность использования FragmentTabHost и фрагментов для каждой вкладки. Таким образом, активность хоста может централизованно обновлять меню опций с onTabChanged(String tab).

В то время как AsyncTask порождается из Activity, если он не запускается onPostExecute(...), он все еще работает. Кроме того, поскольку поведение по умолчанию AsyncTask s является переменным (различные версии Android запускают их последовательно / параллельно), трудно управлять без собственного ThreadPoolExecutor . Ваши быстрые Activity переключения и повторные AsyncTask с, кажется, блокируют.

...