2015-11-30 3 views
2

Я собираюсь разработать приложение для интернет-магазина. Всякий раз, когда пользователь хочет добавить какой-либо товар в корзину, его необходимо проверить с доступностью товара в магазине, а затем добавить в корзину.
Для этого действия я разработал AsyncTask так:Обновление панели действий в разных действиях после завершения работы AsyncTask

class AddItemTask extends AsyncTask<Void,Void,Void>{ 

    @Override 
    protected Void doInBackground(Void... params) { 
     //try to check if item is available to order 
     availabilityFlag = isItemAvailable(currentItem); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     //what should I do know? 
     if (availabilityFlag==true){ 

      addItemToShoppingCart(currentItem); 
      //what should I do now to update Cart Icon? 
     } 
     super.onPostExecute(aVoid); 
    } 
} 

Если элемент доступен, тележка значок покупок, который расположен на ActionBar должен быть обновлен. Проблема в том, что это обновление может произойти, когда мы покинули текущую активность и переместились на другую. Я хочу знать, как мне обновить значок ActionBar без учета того, какая активность запущена?
Примечание: значок корзины отображается в ActionBar всех видов деятельности.

+0

Вы должны создать глобальный контейнер для ваших данных из asynctask и inResume() в заголовках обновлений действий/фрагментов панели инструментов или панели действий. – winston

+0

Вместо использования 'Void, Void, Void' вы можете использовать' Void, Void, Boolean' и может вернуть доступность в 'doInBackground' и в' onPostExecute' вы можете иметь логическое значение. Насколько это касается вашего вопроса, кажется, что вам нужно использовать какое-либо хранилище либо файл, либо db для хранения ваших данных в автономных целях и службу, которая обновит ваш пользовательский интерфейс. –

ответ

0

Что вам нужно сделать, это сохранить элементы, помещенные в корзину в SQLite, и обновить значок в панели действий на основе результатов после запроса таблицы для элементов корзины.

0

В этом случае я бы использовал IntentService для вызовов (например, isItemAvailable) к удаленному серверу. После того, как результат был выполнен в службе, broadcast может быть отправлен для уведомления других компонентов приложения. Таким образом, вы получаете много гибкости. Ваши исходные данные могут храниться в статическом классе, если они действительны только для вашего текущего сеанса приложения, но если вам нужно постоянное хранилище SharedPreferences или SQLite - это ваш путь.

Для обновления ваших действий с действительными данными это должно быть сделано в onResume.
В этом методе вы должны:
1. вызвать свою услугу-> получить трансляцию-> обновить активность или
2. прочитать исходные данные из одного из вышеперечисленных -> активность обновления.

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