我有一個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);
不錯,我會去試試看。之前沒有考慮過'SharedPreferences'。 – Maarten
我應該在ListView中使用'BroadcastReceiver'來監聽來自服務的更新嗎?該服務不能持有對'ListView'的引用... – Maarten
我只想將服務直接寫入'SharedPreferences'。我可能是錯的,但似乎沒有必要連接一個'BroadcastReceiver',除非你在用戶沒有進行交互時進行某種後臺同步。 – Wenger