Android 对于丢失对片段中进度条的引用,我该怎么办?

Android 对于丢失对片段中进度条的引用,我该怎么办?,android,android-fragments,android-asynctask,android-progressbar,Android,Android Fragments,Android Asynctask,Android Progressbar,我有三个片段,Play,Dropbox和tab主机中的设置 在Dropbox片段中,我有一个类变量“progressBar”。我在onActivityCreated中分配它 if(progressBar == null) { progressBar = (ProgressBar) getActivity().findViewById(R.id.progressbar_Horizontal); } 我将其更新为: DropboxAPI.DropboxFil

我有三个片段,Play,Dropbox和tab主机中的设置

在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、 我在没有空条件的情况下尝试了此操作。

替换此

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();

我只是在这里猜测,但如果您在使用
setProgress()
更新它之前,用
findById()重新分配
progressBar
,可能会有所帮助。我想切换片段会导致它们被重新创建,所以您必须再次查找小部件。同样的“冻结进度条”可能会发生在你旋转设备时(这也会让事情重新创建)。我现在来试试,但我想我已经试过了,谢谢,谢谢。这让我的大脑走上了正确的轨道。实际上我有一个最终的ProgressBar=(ProgressBar)getActivity().findViewById(R.id.ProgressBar_水平);坐在这上面太尴尬了。。在iOS中,它会告诉我这个变量会用一个漂亮的大黄色警告覆盖类1。它没有用这个!!!!无论如何谢谢你