2013-05-20 62 views
0

我有一個ListView,顯示一堆可下載的對象。當用戶單擊列表項目時,通過AsyncTask下載該項目,並且還會顯示通知以顯示下載進度。我也希望進度顯示在ListView項目內。跟蹤AsyncTask狀態以更新ListView項目

當您使某個項目可以離線使用時,我希望您的行爲或多或少像Google雲端硬盤一樣。

我的問題:考慮到應用程序在下載完成之前關閉的情況,我想不出一種可以在getView()中檢索可以檢索的下載狀態的可靠方法。

應該onProgressUpdate()最好存儲數據庫中的下載進度,活動中的變量還是直接修改ListView的子項目?

編輯

任何有興趣,我用派出廣播服務時下載狀態的改變:

活動:

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存儲下載的信息,以便稍後在應用程序關閉時訪問它。有點概念,但我希望這有助於。

+0

不錯,我會去試試看。之前沒有考慮過'SharedPreferences'。 – Maarten

+0

我應該在ListView中使用'BroadcastReceiver'來監聽來自服務的更新嗎?該服務不能持有對'ListView'的引用... – Maarten

+0

我只想將服務直接寫入'SharedPreferences'。我可能是錯的,但似乎沒有必要連接一個'BroadcastReceiver',除非你在用戶沒有進行交互時進行某種後臺同步。 – Wenger