【问题标题】:Hardware button back code not responding correctly硬件按钮返回代码未正确响应
【发布时间】:2019-09-14 10:17:43
【问题描述】:
<Page actionBarHidden="true" @loaded="pageLoaded" @unloaded="pageUnloaded">
        <DockLayout>
            <DockLayout v-show="search">
               ...
            </DockLayout>
            <DockLayout class="routeDetails" v-show="!search">
               ...
            </DockLayout>
         </DockLayout>
</Page>

           pageLoaded: function () {
                // We only want to register the event in Android
                if (application.android) {
                    console.log("halllo");
                    application.android.on(application.AndroidApplication.activityBackPressedEvent, this.backEvent);
                }
            },
            pageUnloaded: function () {
                // We only want to un-register the event on Android
                if (application.android) {
                    console.log("done");
                    application.android.off(application.AndroidApplication.activityBackPressedEvent, this.backEvent);
                }
            },
            backEvent: function (args) {
                console.log("hey I pressed");
                if (this.search) {
                    args.cancel = true;
                    this.search = false;
                } else {
                    args.cancel = false;
                }
            }

search 是标准的false

问题

当我在show 视图中search = true 时。我想按回 Android 硬件按钮。它应该被隐藏并显示另一个search = false。但它只有在我连续按下 Android 硬件按钮 2 次后才会这样做。

但是当我在 search = false 的视图上时,它会在我第一次按下 Android 硬件按钮后记录 console.log

我在this blog post 上找到的代码。 在此引用Github issue

更新

Nativescript-Vue Playground

因此,您需要做的是单击屏幕上的按钮之一。 然后使用硬件按钮返回。在此示例中,它将直接执行此操作。但是当您第二次尝试时,您需要按两次硬件按钮才能工作。就我而言,我总是需要按 2 次才能起作用。

【问题讨论】:

    标签: nativescript nativescript-vue


    【解决方案1】:

    你错过了上下文,试试

    application.android.on(application.AndroidApplication.activityBackPressedEvent, this.backEvent, this);
    

    this 作为第三个参数传递可以确保backEvent 方法中的this 指向Vue 组件。

    【讨论】:

    • 我试过了,但没有任何区别。仅在我按下硬件按钮 2 次后,日志才会消失。
    • 您能否分享重现问题的 Playground 示例。
    • 我会尽快做的!
    • 抱歉回复晚了。我给你一个操场的例子。这不完全一样。见解释
    【解决方案2】:

    activityBackPressedEvent 上是否有多个活动侦听器?

    如果始终只有一个活动的侦听器或您想删除所有侦听器,则应仅使用事件名称来删除侦听器。

    application.android.off(application.AndroidApplication.activityBackPressedEvent);
    

    【讨论】:

    • 抱歉没用。我只有在问题中显示的事件侦听器。否则没有。
    • 我检查了您的共享代码,它按预期工作。唯一需要按两次的时间是当您将焦点放在搜索输入上并且键盘处于打开状态时。这是正常行为。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多