2017-10-16 76 views
-3

我有一个包含URL的ListView。当用户点击其中一个网址时,会下载一个视频。我正在调用一个Task中的视频下载函数,该函数又是在一个线程中调用的。用户可以点击多个视频网址并开始下载视频。将为每个视频创建一个单独的任务。我想知道的是如何唯一标识每个视频的任务?如何唯一标识javafx中的每个任务?

功能下载视频:

public void videoFileDownload(){ 
      try { 

       videoDownloadUrl = lblURL.getText().toString(); 

       IndexOfThisNode = hbox.getId(); 


       String path = "XXXX"; 
       downloadThisVideo = new VGet(new URL(videoDownloadUrl),new File(path));    




       downloadThisVideo.download(); 
       System.out.println("Download this video: " + videoDownloadUrl + downloadThisVideo.getVideo().getState()); 

       System.out.println("Download complete"); 



      } catch (Exception ex) { 
       ex.printStackTrace(); 
       System.out.println("Retrying..."); 
      } 
     } 

功能包含任务:

public void showDetailsButton(){ 

     btnSMDetails.addEventHandler(MouseEvent.MOUSE_CLICKED, (e)->{ 
     System.out.println("\n" + "The index is: " + getIndex() + "\n"); 
     showLoader(); 


     //Task created to download videos in background without blocking UI 
     Task downloadVideoTask = new Task<Void>() { 
      @Override 
      public Void call() { 
       //SIMULATE A FILE DOWNLOAD 
       videoFileDownload(); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 
     }; 

     new Thread(downloadVideoTask).start(); 

     downloadVideoTask.setOnSucceeded(taskFinishEvent ->{showLoader(); /*isButtonClicked="0";*/}); 
    }); 
} 
+1

这个问题似乎有点过于宽泛 - 您是通过识别任务意味着什么?据推测,每个“任务”必须具有它下载的视频的URL - 这可能就足够了。另一种方法是在创建时分配一个ID,或者简单地使用引用相等。你想达到什么目的? – Itai

+0

@sillyfly在下载视频时,listcell被禁用,并显示进度条。但是,当我一直向下滚动,然后返回到该单元格时,它不再被禁用,并且不显示进度条。所以,我想告诉listcell不要更新下载按钮被按下的单元格。一位朋友告诉我,这可以通过使用任务和存储任务来实现 –

+2

创建一个[MCVE]来演示您试图解决的实际问题。 –

回答

1

Listcells不要在一个与底层列表中的一个关系存在。只有足够的listcells实例化来填充listview的视口再加上一些额外的内容。数据通过updateCell方法进入和离开列表单元。

因此,您不能将数据存储在listcell中,因为如果您滚动列表,该单元格将被重新用于其他列表项目。

您需要做的是将对任务的引用存储在基础列表项中。修改updateCell方法,将listcell中的进度条的可见性和值绑定到任务进度属性。

相关问题