卸载所有先前安装的屏幕以在后按时退出应用程序
Posted
技术标签:
【中文标题】卸载所有先前安装的屏幕以在后按时退出应用程序【英文标题】:Unmount all previously mounted screens to exit the app on back press 【发布时间】:2020-06-06 19:32:04 【问题描述】:我有一个要求,我需要在按下后退按钮时退出应用程序。基本上我尝试了BackHandler
API,它可以工作但有一定的限制。所以就我而言,我觉得最好的方法是卸载所有以前安装的组件,这样当前屏幕就成为堆栈中的第一个屏幕。
我有以下屏幕:
登录 OtpVerification 名称 电子邮件 . . .还有更多
我需要的是,当我在 Name 屏幕上时,如果有人按下后退按钮,应用程序应该退出。但如果有人在 Email 屏幕上,用户应该只能返回到 Name 屏幕。
使用 BackHandler 的片段
constructor(props)
super(props);
.
.
BackHandler.addEventListener("hardwareBackPress", this._handleBackPress);
.
.
.
.
_handleBackPress = () =>
BackHandler.exitApp();
;
.
.
.
.
_onPress = () =>
BackHandler.removeEventListener("hardwareBackPress", this._handleBackPress);
this.props.navigation.navigate("Email", name: this.state.name );
;
【问题讨论】:
你使用的是什么版本的 react-navigation? @LonelyCpp 版本 5 【参考方案1】:解决方案是在导航到名称屏幕之前重置堆栈导航器。
使用 react-navigation 中的 reset
操作来执行此操作。 documentation
执行此操作的函数的一个简单示例是 -
react-navigation 5 - 使用CommonActions
import CommonActions from '@react-navigation/native';
reset = (routeName) =>
return navigation.dispatch(CommonActions.reset(
index: 0,
routes: [ name: routeName ]
));
反应导航 v4.x
reset = (routeName) =>
return this.props
.navigation
.dispatch(NavigationActions.reset(
index: 0,
actions: [
NavigationActions.navigate( routeName )
]
));
将其放入OtpVerification
屏幕并在导航到NameScreen
时调用reset('NameScreen')
相关答案-https://***.com/a/43121263/3262983
【讨论】:
这看起来不像它的版本 5。我也不确定这是否会退出应用程序,因为我尝试了类似的东西,它总是带我进入登录屏幕。 我为第 5 版添加了一个示例。试试看:) 那我应该怎么调用reset呢?之前this.props.navigation.navigate("NameScreen");
不要调用导航! reset 将导航到您给它的任何屏幕。只需致电reset("NameScreen");
它确实完全关闭了应用程序。如果您在谈论 android 中的“最近的应用程序”,那将需要一些 android 特定的配置。 ***.com/questions/3762763/…以上是关于卸载所有先前安装的屏幕以在后按时退出应用程序的主要内容,如果未能解决你的问题,请参考以下文章
自定义 TextInputLayout 在后按时设置错误的值