当backstack为空时,按下android上的后退按钮会破坏导航逻辑

Posted

技术标签:

【中文标题】当backstack为空时,按下android上的后退按钮会破坏导航逻辑【英文标题】:Pressing back button on android breaks navigation logic when backstack is empty 【发布时间】:2020-08-07 14:33:08 【问题描述】:

我在返回按钮before 上遇到过类似问题。 在我的应用程序中,我有一个登录页面,用户在其中提交他们的电话号码,然后他们被带到一个页面,在那里他们输入他们收到的验证码。如果用户按下该页面上的后退按钮,应用程序将被最小化,但当再次打开时,会显示登录页面而不是提交验证码的页面,即使我指定了clearhistory: true

这就是我的导航方式:

this.$navigateTo(ConfirmSMS, 
  transition: name: 'slideLeft',
  clearHistory: true
);

【问题讨论】:

如果你使用clearHistory: true 那么历史堆栈将被清除,点击返回按钮不会最小化应用程序,而是会终止它。因此,当您再次打开它时,您将再次获得登录屏幕,这是预期的行为。 @Manoj 你是什么意思它会终止它?按下返回按钮后,我在打开的应用程序列表中看到了该应用程序。 @Manoj 在任何情况下,如何让后退按钮最小化应用程序而不是在堆栈为空时终止它?这个问题有解决办法吗? 您必须监听返回按钮事件,如果堆栈上没有项目,则取消该操作并开始一个针对主屏幕的新意图。 @Manoj 谢谢,我使用this 作为监听器,如何检查nativescript 中的导航堆栈是否为空? 【参考方案1】:

只有当您不想在按下返回按钮后返回登录时,您才必须使用clearHistory

当您按下返回按钮并且返回堆栈中没有页面时,应用程序将终止。它仍然会出现在最近的应用程序中,但与 ios 不同的是,点击最近的应用程序会重新启动它,除非它被暂停但另一个活动/主页按钮。

您可以覆盖后退按钮来暂停应用程序而不是终止它。

import  isandroid  from "@nativescript/core/platform";
import * as application from "@nativescript/core/application";
import  Frame  from "@nativescript/core/ui/frame";

if (isAndroid) 
    application.android.on(application.AndroidApplication.activityBackPressedEvent, function (args) 
        const frame = Frame.topmost();
        if (frame && !frame.canGoBack()) 
            args.cancel = true;
            var startMain = new android.content.Intent(
                android.content.Intent.ACTION_MAIN
            );
            startMain.addCategory(android.content.Intent.CATEGORY_HOME);
            startMain.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
            application.android.foregroundActivity.startActivity(startMain);
        
    );

Playground Sample

【讨论】:

我遇到这个问题的原因是我发现我的一些不太懂技术的用户按下后退按钮以便从他们的短信中读取验证码 evnetho 他们已经可以从它的通知中读取它. 这仅适用于从最近的应用重新打开应用的情况。但不是在通过单击应用程序图标重新打开应用程序时。有没有办法解决这个问题?我知道按下希望按钮时也是如此,我不是在问问题,因为我不想再问另一个问题,你只会评论这是不可能的:D 如果可能的话,告诉我问一个新问题问题:D 此时,点击应用图标也会让应用返回(暂停 -> 恢复)。这不会重新启动应用程序,除非它被最近的应用程序杀死/您有一些特殊的清单设置。 android是从哪里导入的?我的 linter 唠叨说它没有定义,但代码工作得很好 以防有人使用 eslint 稍后到达。见this

以上是关于当backstack为空时,按下android上的后退按钮会破坏导航逻辑的主要内容,如果未能解决你的问题,请参考以下文章

我创建了一个添加两个数字的应用程序但是当编辑文本为空时按下按钮的应用程序一直停止

当我们在android中使用backstack返回上一个片段时,上一个片段正在重新启动

当ListView为空时Android显示文本

仅当文本字段为空时如何显示图像?

当输入文件上的字段为空时,XSLT 2.0 如何跳过写入元素

文本字段为空时禁用按钮