【问题标题】:What can I do about losing reference to a progress bar which is in a fragment?如果丢失对片段中进度条的引用,我该怎么办?
【发布时间】: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_Horizo​​ntal);坐在这个 O_O 上面太尴尬了.. 在 iOS 中它会告诉我这个变量会用一个很好的黄色警告覆盖第一类。它没有这个!!!!还是谢谢

标签: android android-fragments android-asynctask android-progressbar


【解决方案1】:

替换这个..

getActivity().runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                          System.out.println(dProgress);
                          progressBar.setProgress((int) dProgress);

                      }
                  });

有了这个..

Thread thread = new Thread() {
        @Override
        public void run() {
           System.out.println(dProgress);
                          progressBar.setProgress((int) dProgress);
        }
    };
    thread.start();

【讨论】:

    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    相关资源
    最近更新 更多