首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mobileapplication.mobileevent BACK_BUTTON_PRESSED

mobileapplication.mobileevent BACK_BUTTON_PRESSED
EN

Stack Overflow用户
提问于 2017-06-02 20:02:54
回答 1查看 190关注 0票数 0

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

代码语言:javascript
复制
    public void MobileEvent(javafx.event.EventTarget source,
               javafx.event.EventType<MobileApplication.MobileEvent> BACK_BUTTON_PRESSED) {
    service.backPressed();
}

这是一个胶子应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-02 20:51:44

自定义事件(如MobileEvent.BACK_BUTTON_PRESSED )的思想是,您可以使用事件处理程序订阅它。

例如,如果您创建一个图层,并且希望在用户按后退按钮时关闭它:

代码语言:javascript
复制
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);
}

如果您创建一个单独的View项目,使用上面的代码片段,并将其部署到Android设备上,您可以验证当您单击该按钮时该层是否出现,如果您单击Android back按钮,它将关闭该层。

请注意,如果您再次点击它,它将关闭应用程序:主视图已经有一个侦听器在这个事件,这就是为什么应用程序被关闭。或者,如果您处于次要视图中,则使用此事件,您将返回到前一个视图。

虽然您可以在代码中的任何点订阅此事件,就像我在上面的示例中所做的那样,但是已经有其他事件可以更容易地跟踪。例如,显示LifecycleEvent events, likeHIDING``的or已经被所有视图所使用。

因此,您可以将侦听器添加到自定义视图中的任何一个事件:

代码语言:javascript
复制
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"));
}

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

代码语言:javascript
复制
    setOnHiding(e -> {
        Services.get(MyAudioService.class).ifPresent(service -> service.stop());
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44336613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档