我有一个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);
答案 0 :(得分:1)
我会尝试使用Service,如果您有跟踪下载的通知,它看起来您可能正在做什么。如果您可以跟踪Service
中的进度并将该信息也发送到ListView
,则可以轻松地在ProgressBar
中显示Service
。
使用SharedPreferences
还可以使用{{1}}存储下载的信息,以便稍后在应用关闭时访问该信息。有点概念,但我希望这会有所帮助。