JavaFXPorts:javafx.scene.control.ComboBox 在 Android 设备上的这种行为是否正确?

JavaFXPorts: Is this correct behavior for javafx.scene.control.ComboBox on Android device?

在 ComboBox 中选择项目后,此选定项目不会显示在 ComboBox 中 - 仅 Android 设备,在桌面上可以。 比较这两个截图:


[在桌面上选择项目 "Option 2"]

[在 Android 设备上选择了项目 "Option 2"]

我正在使用 JavaFXPorts 8.60.8。

基于此 , and giving that on your bug report 你提到你使用的是三星设备,在一些三星设备中存在一个已知问题,即在 JavaFXPorts 中完成的触摸事件处理无法像其他 Android 台设备。

虽然这是针对 JavaFXPorts 的修复,但您可以尝试以下解决方法:

comboBox.setCellFactory(p -> new ListCell<String>() {

        private String item;
        {
            setOnMousePressed(e -> comboBox.getSelectionModel().select(item));
        }

        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty); 
            this.item = item;
            setText(item);
        }

    });

请注意,我使用了鼠标按下事件处理程序而不是鼠标单击事件处理程序。由于我无法重现它,在我的情况下,鼠标单击被列表选择事件消耗(因为这正常工作),但在您的情况下,您可能可以使用按下或单击事件。

根据 Josés 的回答,我实现了以下通用 Helper 函数,这可能对你们中的一些人有所帮助:

public static <T> void removeSelectionBug(ComboBox<T> comboBox) {
    comboBox.setCellFactory(p -> new ListCell<T>() {
        private T item;
        {
            setOnMousePressed(e -> comboBox.getSelectionModel().select(item));
        }


        @Override
        protected void updateItem(T item, boolean empty) {
            super.updateItem(item, empty);
            this.item = item;
            if (item != null) {
                setText(item.toString());
            }
        }
    });
}

顺便说一句:我的所有手机(三星 Note 3、索尼 XPERIA Z3 Compact 和 Nexus 4)都有这个错误