[英]React Native - Android - Issue with Disabling Back Button Globally
因此,我在Android中遇到了React Native問題。 我有以下導航器:
const AppStackNavigator = createStackNavigator({
loginFlow: createStackNavigator({
Start: { screen: Start },
Signup: { screen: Signup },
Login: { screen: Login },
},{
headerMode: "none",
initialRouteName: "loginFlow",
})
});
有了這個,我有3個屏幕,開始,注冊和登錄,而loginFlow
是initialRouteName
。 Start.js
包含以下內容:
componentDidMount() {
BackHandler.addEventListener("hardwareBackPress", this.handleBackButton);
}
handleBackButton() {
// Logic to increment backPresses removed, opens as Alert (confirm)
if(global.backPresses >= 2){
BackHandler.exitApp();
}
return true;
}
render() {
return (
<Row>
<Col>
<Button full onPress={() => this.props.navigation.navigate("Signup")}>
<Text>{"Sign Up"}</Text>
</Button>
</Col>
<Col>
<Button full onPress={() => this.props.navigation.navigate("Login")}>
<Text>{"Log In"}</Text>
</Button>
</Col>
</Row>
);
}
本質上, Start.js
充當注冊和登錄的中心。 最重要的是,它將hardwareBackPress
事件偵聽器設置為return true;
,以全局禁用Android后退按鈕,除非雙擊后退按鈕(為簡便起見刪除了邏輯)。
在“開始”上按返回按鈕,或導航到“注冊/登錄”,然后按“返回”按鈕,則沒有任何反應,這是預期的行為。
在調用Backhandler.exitApp()
,關閉應用程序然后重新打開它之前,此功能都很Backhandler.exitApp()
。 發生這種情況時,“開始”按鈕上的“后退”按鈕被禁用,但是一旦導航到“注冊/登錄”,我就可以按“后退”按鈕並返回到“開始”按鈕,這不是預期的功能。
總結一下:
我相信這是BackHandler.exitApp();
的問題BackHandler.exitApp();
,因為只需全局禁用后退按鈕就可以正常工作。 但是我無法弄清楚。 重新打開應用程序時,該代碼似乎可以正常工作,但在向前導航后似乎不再適用。 而且,我從不刪除事件偵聽器,如步驟4的結果所示,但似乎有一些阻止它。
還有其他人看到過這個問題嗎?
在將要注冊的組件中,您可以使用退出應用程序功能為后代添加事件監聽器。 這將有助於它不會將您重定向到“開始”屏幕,而只是關閉您的應用程序。
不能在componentWillUnmount中的removeEventListener解決此問題嗎?
componentDidMount() {
BackHandler.addEventListener("hardwareBackPress", this.handleBackButton);
}
componentWillUnmount() {
BackHandler.removeEventListener("hardwareBackPress", this.handleBackButton);
}
handleBackButton() {
// Logic to increment backPresses removed, opens as Alert (confirm)
if(global.backPresses >= 2){
BackHandler.exitApp();
}
return true;
}
調用componentWillUnmount不會刪除后退按鈕的全局偵聽器,因為Start.js View僅在用戶關閉應用程序時才會被卸載。 通過導航器導航到其他視圖時,即使該組件不可見,該組件也會保持安裝狀態(至少這是react-native-navigation中的行為)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.