2013-05-20 2 views
0

У меня есть ListView, который показывает кучу загружаемых объектов. Когда пользователь нажимает элемент списка, элемент загружается через AsyncTask, а также добавляется уведомление о ходе загрузки. Я также хочу, чтобы прогресс отображался внутри элемента ListView.Сохранение статуса AsyncTask для обновления элементов ListView

Я хочу вести себя более или менее как Google Диск, когда вы делаете доступный элемент в автономном режиме.

Моя проблема: учитывая ситуации, когда приложение закрыто до завершения загрузки, я не могу придумать надежный способ «сохранить» статус загрузки, который можно получить в getView().

Должно ли onProgressUpdate() лучше всего сохранить ход загрузки в базе данных, переменную внутри действия или изменить дочерний элемент ListView напрямую?

EDIT

Для тех, кто заинтересован, я использовал сервис, который рассылает широковещательный при изменении состояния загрузки:

активность:

private BroadcastReceiver mDataSetChangedReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(downloadDetailFragment!=null){ 
      downloadDetailFragment.notifyDataSetChanged(); 
     } 
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    LocalBroadcastManager.getInstance(this).registerReceiver(mDataSetChangedReceiver, 
     new IntentFilter(DownloadService.DOWNLOAD_STATUS_CHANGED)); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

LocalBroadcastManager.getInstance (это). unregisterReceiver (mDataSetChangedReceiver); }

AsyncTask:

 Intent intent = new Intent(DownloadService.DOWNLOAD_STATUS_CHANGED); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 

ответ

1

Я бы попробовать использовать Service, что это выглядит можно делать в любом случае, если у вас есть уведомление отслеживания загрузки. Если вы можете отслеживать прогресс в своем Service и отправить эту информацию в ListView также, вы можете показать ProgressBar в обоих случаях.

Использование Service также позволит вам сохранять загруженную информацию с помощью SharedPreferences, чтобы вы могли получить к ней доступ позже, если приложение закрыто. Kinda концептуально, но я надеюсь, что это поможет.

+0

Ницца, я попробую его. Раньше не думал об «SharedPreferences». – Maarten

+0

Должен ли я использовать «BroadcastReceiver» в ListView, слушая обновления из службы? Служба не может содержать ссылку на «ListView» ... – Maarten

+0

Я просто хотел бы, чтобы служба записывалась прямо в «SharedPreferences». Возможно, я ошибаюсь, но, похоже, нет необходимости подключать «BroadcastReceiver», если вы не выполняете какую-либо фоновую синхронизацию, когда пользователь не взаимодействует. – Wenger