2017-10-16 2 views
-3

URLを含むListViewがあります。ユーザーがURLの1つをクリックすると、ビデオがダウンロードされます。私はスレッド内で呼び出されるTask内でビデオダウンロード機能を呼び出す。ユーザーが複数の動画URLをクリックすると、動画がダウンロードされます。ビデオごとに個別のタスクが作成されます。私が知りたいことは、各ビデオのタスクを一意に識別する方法です。タスクを含む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を持っていなければならず、それだけで十分かもしれません。もう1つの方法は、作成時にIDを割り当てるか、単に参照平等を使用する方法です。あなたは何を達成しようとしていますか? – Itai

+0

@sillyflyビデオのダウンロード中は、リストセルが無効になり、進行状況バーが表示されます。しかし、スクロールしてそのセルに戻っても、もはや無効にはならず、進行状況バーは表示されません。だから、私はダウンロードボタンが押されているセルを更新しないようにリストセルに伝えたい。友人は、タスクを使用してこれを達成し、タスクを保存すると教えてくれました –

+2

解決しようとしている実際の問題を示す[MCVE]を作成します。 –

答えて

1

Listcellsは、下のリストとの1対1の関係には存在しません

機能はビデオをダウンロードします。リストビューのビューポートと2つの特別なビューポートを満たすためにインスタンス化されたリストセルしかありません。データは、updateCellメソッドを使用してリストセルの内外で入れ替えられます。

リストをスクロールすると、セルが別のリスト項目に再利用されるため、リストセルにデータを保存することはできません。

実行する必要があるのは、タスクの参照を基になるリストアイテムに格納することです。 updateCellメソッドを変更して、リストセル内の進行状況バーの可視性と値をタスク進捗プロパティにバインドします。

関連する問題