mobileapplication.mobileevent BACK_BUTTON_PRESSED

我的两个视图中有2个Android原生音频实例。 当用户按下后退按钮并离开视图时,我正试图让音频停止,因为它没有自动发生。 我查看了文档并看到了MobileEvent类。 我试过没有运气实现它的构造函数。 这是我的第一个应用程序,我只是为了这个目的而自己学习Java和JavaFX,所以一些帮助会很棒。 我目前的尝试如下。

public void MobileEvent(javafx.event.EventTarget source, javafx.event.EventType BACK_BUTTON_PRESSED) { service.backPressed(); } 

这是胶子应用程序。

MobileEvent.BACK_BUTTON_PRESSED这样的自定义事件的想法是您可以使用事件处理程序订阅它。

例如,如果您创建一个图层,并且想要在用户按下后退按钮时将其关闭:

 public BasicView(String name) { super(name); // create a custom layer MobileApplication.getInstance().addLayerFactory("My Layer", () -> new Layer() { private final Node root; private final double size = 300; { root = new StackPane(new Button("A custom layer")); root.setStyle("-fx-background-color: lightgreen;"); getChildren().add(root); getApp().getGlassPane().getLayers().add(this); // Add event handler to listen to Android Back Button Pressed event, hiding the layer addEventHandler(MobileApplication.MobileEvent.BACK_BUTTON_PRESSED, e -> { hide(); e.consume(); }); } @Override public void hide() { setShowing(false); super.hide(); } @Override public void layoutChildren() { root.setVisible(isShowing()); if (!isShowing()) { return; } root.resize(size, size); resizeRelocate(0, 0, size, size); } }); Button button = new Button("Show Layer"); button.setOnAction(e -> MobileApplication.getInstance().showLayer("My Layer")); VBox controls = new VBox(15.0, button); controls.setAlignment(Pos.CENTER); setCenter(controls); } 

如果您创建一个单一视图项目,使用上面的代码段并将其部署在Android设备上,您可以validation当您单击该图层显示的按钮时,如果您点击Android后退按钮,它将关闭该图层。

请注意,如果再次点击它,它将关闭应用程序:主视图已经有一个关于此事件的监听器,这就是应用程序关闭的原因。 或者,如果您处于辅助视图中,则使用此事件将返回上一个视图。

虽然您可以在代码中的任何位置订阅此事件,就像我在上面的示例中所做的那样,但您已经可以更轻松地跟踪其他事件。 例如, LifecycleEvent events, like SHOWING or HIDING`)已被所有视图使用。

因此,您可以向自定义视图添加任何这些事件的侦听器:

 public BasicView(String name) { super(name); Label label = new Label("This is a custom view"); VBox controls = new VBox(15.0, label); controls.setAlignment(Pos.CENTER); setCenter(controls); setOnShowing(e -> System.out.println("Showing Event")); setOnHiding(e -> System.out.println("Hiding Event")); } 

请注意,在您的情况下,您可以轻松找出用户何时离开视图,然后相应地调用服务来停止音频:

  setOnHiding(e -> { Services.get(MyAudioService.class).ifPresent(service -> service.stop()); });