2011-12-22 2 views
1

У меня есть ListViewActivity, который использует AsyncTask для загрузки данных из базы данных. В этой операции есть меню опций, которое проверяет, есть ли какие-либо элементы данных в ListView List в onPrepareOptionsMenu().Обновить ActionBar от AsyncTask

Если есть элементы, я включаю одну из опций, которая отображается на ActionBar, что позволяет пользователю удалять элементы.

Теперь, когда начинается действие, запускается AsyncTask и по мере запуска функции onPrepareOptionsMenu(), пока AsyncTask все еще запущен, этот пункт меню никогда не включается, если устройство не перевернуто и данные списка не передаются как например, в обход AsyncTask.

Так, в AsyncTask-х onPostExecute(), я называю invalidateOptionsMenu(), но это не похоже, меню для обновления (я отладки кода в onCreateOptionsMenu() и onPrepareOptionsMenu(), и ни обжигают). Любая помощь оценивается.

+0

По праву он должен работать. не видите причину, по которой это не должно быть вашей асинтемой, внутренним классом текущей деятельности? или отдельный класс? – Rejinderi

+0

Внутренний класс текущей деятельности –

+1

Предполагаю, что вы вызываете «MyActivity.this.invalidateOptionsMenu()» правильно? Можете ли вы попробовать мое предложение ниже и отладить? – Rejinderi

ответ

0

Проблема связана с плохим значением глобальной переменной. Я запускал код внутри метода onPrepareOptionsMenu() с глобальным логическим значением, которое никогда не было истинным, и поставил инструкцию отладки INSIDE в логическую проверку ... в результате чего оператор отладки никогда не работал.

После решения этой проблемы все работает должным образом, правильный код выше.

1

Вы можете попробовать создать глобальное логическое значение, например haveData, а также по порядку onPostExecute(). Соответственно установите значение boolean в true или false. Затем, основываясь на логическом, выполните проверку на onPrepareOptionsMenu() и включите соответствующий пункт меню.

Последний раз, когда я пробовал, он работал для меня не уверен, почему это не для вас. Отлаживайте оттуда, если он не работает, сообщите нам, где он не выполняется.

+0

это мне очень помогло, спасибо – Shajo

Смежные вопросы