Nativescript 硬件按钮返回代码没有正确响应 ... ... pageLoaded:函数(){ //我们只想在Android中注册该事件 if(application.android){ 控制台日志(“halllo”); application.android.on(application.AndroidApplication.activityBackPressedEvent,this.backEvent); } }, PageUnload:函数(){ //我们只想在Android上取消注册该事件 if(application.android){ 控制台日志(“完成”); application.android.off(application.AndroidApplication.activityBackPressedEvent,this.backEvent); } }, backEvent:函数(args){ log(“嘿,我按了”); if(this.search){ args.cancel=true; this.search=false; }否则{ args.cancel=false; } }

Nativescript 硬件按钮返回代码没有正确响应 ... ... pageLoaded:函数(){ //我们只想在Android中注册该事件 if(application.android){ 控制台日志(“halllo”); application.android.on(application.AndroidApplication.activityBackPressedEvent,this.backEvent); } }, PageUnload:函数(){ //我们只想在Android上取消注册该事件 if(application.android){ 控制台日志(“完成”); application.android.off(application.AndroidApplication.activityBackPressedEvent,this.backEvent); } }, backEvent:函数(args){ log(“嘿,我按了”); if(this.search){ args.cancel=true; this.search=false; }否则{ args.cancel=false; } },nativescript,nativescript-vue,Nativescript,Nativescript Vue,search是标准的false 问题 当我在show视图中时,其中search=true。我想按下Android硬件按钮。它应该被隐藏,并显示另一个search=false。但只有在我连续按下安卓硬件按钮两次后,它才会这样做 但是,当我在视图中看到search=false时,它会在我第一次按下Android硬件按钮后记录控制台.log 我在上面找到的代码。 在本文件中引用 使现代化 所以你需要做的是点击屏幕上的一个按钮。 然后使用硬件按钮返回。在本例中,它将直接执行此操作。但是当你第二次尝试这

search
是标准的
false

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

但是,当我在视图中看到
search=false
时,它会在我第一次按下Android硬件按钮后记录
控制台.log

我在上面找到的代码。 在本文件中引用

使现代化

所以你需要做的是点击屏幕上的一个按钮。
然后使用硬件按钮返回。在本例中,它将直接执行此操作。但是当你第二次尝试这样做时,你需要按下硬件按钮两次,然后它才能工作。在我的情况下,我总是需要按两次才能正常工作。

如果缺少上下文,请重试

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

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

ActivityBackpresseEvent上是否有多个活动侦听器

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

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

我试过了,但没什么区别。只有在我按下硬件按钮2次后,日志才会消失。你能在重现问题的地方共享游乐场示例吗?我很快就会完成!很抱歉反应太晚。我给你举了一个游乐场的例子。不完全一样。请参阅解释抱歉没有起作用。我只有问题中显示的事件侦听器。否则没有。我检查了你的共享代码,它按预期工作。唯一需要按两次back键的时间是当您将焦点放在搜索输入上并且键盘处于打开状态时。这是正常的行为。正当
application.android.off(application.AndroidApplication.activityBackPressedEvent);