0

我有一个ListView显示一堆可下载对象的。当用户单击列表项时,该项目会通过 下载AsyncTask,并且还会发出通知以显示下载进度。我还希望在 ListView 项中显示进度。

当您使项目脱机可用时,我希望其行为或多或少像 Google Drive。

我的问题:考虑到应用程序在下载完成之前关闭的情况,我想不出一种可靠的方式来“存储”可以在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(this).unregisterReceiver(mDataSetChangedReceiver); }

异步任务:

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

1 回答 1

1

我会尝试使用Service,如果您有跟踪下载的通知,看起来您可能正在这样做。如果您可以跟踪您的进度Service并将该信息发送给ListView也,您可以ProgressBar轻松地在两者中显示。

使用 aService还可以让您存储下载的信息,SharedPreferences以便在应用程序关闭时稍后访问它。有点概念,但我希望这会有所帮助。

于 2013-05-20T14:15:25.557 回答