【发布时间】:2015-04-30 06:11:48
【问题描述】:
我在标签主机中拥有三个片段,Play、Dropbox 和 Settings。
在 Dropbox 片段中,我有一个类变量“progressBar”。我在 onActivityCreated 中分配。
if(progressBar == null)
{
progressBar = (ProgressBar) getActivity().findViewById(R.id.progressbar_Horizontal);
}
我用这个更新它:
DropboxAPI.DropboxFileInfo info = mDBApi.getFile(directoryOfFile, null, outputStream, new ProgressListener() {
@Override
public long progressInterval() { return 2000; }
public void onProgress(long downloadedSoFar, long totalSize) {
final double dProgress = ((double)downloadedSoFar / totalSize)*100.0;
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
System.out.println(dProgress);
progressBar.setProgress((int) dProgress);
}
});
}
这非常有效,但是,当我移动到另一个片段并返回时,它会停留在原来的位置。这很烦人,因为我仍然可以看到我的 System.out.println(dProgress) 工作。我似乎没有做任何事情可以让我重新分配进度条并且它可以工作。有什么办法可以做到这一点吗?任何人都只是指出我如何实现这一目标的正确方向?我查看了一些应用程序,了解它们是如何做到的(我是 iOS 人),它们都只是提示用户打开一个进度屏幕,但我希望用户能够在下载时做一些事情。
p.s 我在没有 null 条件的情况下尝试过这个。
【问题讨论】:
-
我只是在这里猜测,但如果您在使用
setProgress()更新之前将progressBar重新分配为findById()可能会有所帮助。我想切换片段会导致重新创建它们,因此您必须再次查找小部件。旋转设备时可能会出现相同的“冻结进度条”(这也会重新创建内容)。 -
我现在试一试,但我想我已经尝试过了,谢谢
-
嗨,谢谢。它让我的大脑走上了正轨。我实际上有一个最终的 ProgressBar progressBar = (ProgressBar) getActivity().findViewById(R.id.progressbar_Horizontal);坐在这个 O_O 上面太尴尬了.. 在 iOS 中它会告诉我这个变量会用一个很好的黄色警告覆盖第一类。它没有这个!!!!还是谢谢
标签: android android-fragments android-asynctask android-progressbar