我正在尝试构建一个 Twitter 风格的 ListView,但我无法在同一个列表中多次重复使用同一个 ImageView。加载多个副本似乎很浪费,并且由于 UI 虚拟化导致滚动速度变慢。有任何解决方法吗?
public class TwitterCell extends ListCell<Object> {
private static HashMap<String, ImageView> images = new HashMap<String, ImageView>();
@Override
protected void updateItem(Object tweet, boolean empty) {
super.updateItem(tweet, empty);
Tweet t = (Tweet) tweet;
if (t != null) {
String message = t.getMessage();
setText(message);
String imageUrl = t.getImageUrl();
if (!images.containsKey(imageUrl)) {
images.put(imageUrl, new ImageView(imageUrl));
}
setGraphic(images.get(imageUrl));
}
}
最佳答案
场景图不能在 JavaFX 中包含两次相同的 Node
,并且没有克隆节点的方法(据我所知)。
解决方法可能是让您的 map 成为 HashMap
存储 Image
而不是 ImageView
,并将最后一行更改为
setGraphic(new ImageView(images.get(imageUrl)));
这样您至少可以缓存实际 Image
的加载,这应该是最繁重的部分。
关于javafx-2 - 在 JavaFX 的同一个场景中多次重用同一个 ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175022/