2016-03-31 19 views
1

link to imgurJavaFX ListView yinelenen kaldırma hatası

@FXML 
ListView queueList; 

ObservableList<QueueSong> SongQueueObservableList; 


queueList.setCellFactory(new Callback<ListView<QueueSong>,ListCell<QueueSong>>() { 
    @Override 
    public ListCell<QueueSong> call(ListView<QueueSong> myObjectListView) { 
     ListCell<QueueSong> cell = new ListCell<QueueSong>(){ 
      @Override 
      protected void updateItem(QueueSong myObject, boolean b) { 
       super.updateItem(myObject, b); 
       if(myObject != null) { 
        setText(myObject.getSong()); 
       } 
      } 
     }; 
     return cell; 
    } 
}); 

queueList.setItems(SongQueueObservableList); 

SongQueueObservableList.add(new QueueSong("song 1", "artist 1")); 
SongQueueObservableList.add(new QueueSong("song 2", "artist 2")); 
SongQueueObservableList.add(new QueueSong("song 3", "artist 3")); 
SongQueueObservableList.add(new QueueSong("song 4", "artist 4")); 

İlk kopya sonra satırlar seçilemez

Platform.runLater(() -> { 
     // queueList.getItems().remove(0); 
     SongQueueObservableList.remove(0); 
    }); 

kaldırma aşağıdaki uygulamaları denedim. Ve tüm değerler listeden kaldırıldıktan sonra, ListView boş bir listeyle güncellenir.

Bunu çözmeyle ilgili herhangi bir ipucu varsa, bunu takdir ediyorum.

Hata ayıklayıcısını kullandığımda, hem ObservableList hem de ListView beklenen değerlere sahiptir. Sanırım asıl soru şu ki, neden sadece tüm nesneler kaldırıldığında ListView kendini temizliyor?

+0

Bir [Minimal Komple ve Doğrulanabilir örnek] ekleyebilir (http://stackoverflow.com/help/mcve): Bu hücreler boş hale gelmesi mümkün olduğundan, bu davranışı düzeltmek gerekir ? – ItachiUchiha

cevap

2

Sorun, kullandığınız hücre sınıfıdır. Sadece metni ayarlar, ancak asla temizlemez. Sorunuzun

new ListCell<QueueSong>(){ 
    @Override 
    protected void updateItem(QueueSong myObject, boolean empty) { 
     super.updateItem(myObject, empty); 
     // set text to song or clear (= set to null) 
     setText((empty || myObject == null) ? null : myObject.getSong()); 
    } 
} 
+0

Bunu kendim görmeliydim. Çok teşekkür ederim. – user3277087