Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mobileapplication.MobileAvent后退按钮按下_Java_Android_Javafx_Gluon Mobile - Fatal编程技术网

Java mobileapplication.MobileAvent后退按钮按下

Java mobileapplication.MobileAvent后退按钮按下,java,android,javafx,gluon-mobile,Java,Android,Javafx,Gluon Mobile,我的两个视图中有两个android本机音频实例。当用户按下后退按钮并离开视图时,我试图让音频停止,因为它不是自动发生的。我看过文档,看到了MobileEvent类。我尝试过实现它的构造函数,但没有成功。这是我的第一个应用程序,我只是为了这个目的自学了Java和JavaFX,所以一些帮助会很好。我目前的尝试如下 public void MobileEvent(javafx.event.EventTarget source, javafx.event.Event

我的两个视图中有两个android本机音频实例。当用户按下后退按钮并离开视图时,我试图让音频停止,因为它不是自动发生的。我看过文档,看到了MobileEvent类。我尝试过实现它的构造函数,但没有成功。这是我的第一个应用程序,我只是为了这个目的自学了Java和JavaFX,所以一些帮助会很好。我目前的尝试如下

    public void MobileEvent(javafx.event.EventTarget source,
               javafx.event.EventType<MobileApplication.MobileEvent> BACK_BUTTON_PRESSED) {
    service.backPressed();
}
public void MobileEvent(javafx.event.EventTarget源代码,
javafx.event.EventType返回(按下按钮){
service.backPressed();
}

这是一个胶子应用程序。

MobileEvent.BACK\u按钮\u按下这样的自定义事件的想法是,您可以使用事件处理程序订阅它

例如,如果您创建了,并且希望在用户按下后退按钮时将其关闭:

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设备上,您可以验证当您单击按钮时图层是否显示,如果您单击Android后退按钮,图层是否将关闭

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

虽然您可以在代码中的任何时候订阅此事件,就像我在上面的示例中所做的那样,但是您已经可以更轻松地跟踪其他事件。例如,
LifecycleEvent事件,如
显示
隐藏”,已经被所有视图使用

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

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());
    });

Android Back按钮映射到ESCAPE键,因此您应该使用KeyCode收听KeyEvent。ESCAPE不只是接收
MobileeEvent的
。按下Back按钮
?当我将相应的侦听器添加到
视图时,它不会被触发。是,也不会。事实上,事件不会在视图上触发,只会在层上触发,但视图会对Android上直接按下的后退按钮作出反应。这意味着如果我不想过滤按下的
后退按钮
事件,当没有显示
时,我必须对
LifecycleEvent
隐藏
做出反应,或者听正在按下的
ESCAPE
键。我认为应该在javadoc中提到,只有
接收
后退按钮
事件,因为这并不明显。实际上,层和对话框接收后退事件。查看当前生命周期事件。是的,看起来有点困惑。这是答案的基础。谢谢。AndroidNativeAudio的瞬间已经实例化。所以我可以调用setOnHiding(e->{service.stop());});而不是再次调用服务。它确实适用于我的应用程序。谢谢你,何塞