【发布时间】:2019-03-22 19:36:39
【问题描述】:
我对 BackHandler 有一些问题,问题是
当运行应用程序并转到比方说注册屏幕并在我的手机中触摸背面时,它们将运行该功能并显示警报以确认,但现在当我转到任何其他屏幕并触摸背面时,它们会我需要在每个 backHandler.exitApp(); 上返回上一个屏幕。运行,虽然我写如果 routname 是 SignUp 只是退出应用程序而不是其他屏幕
这是我的代码
注册
import React from "react";
import {
Text,
TextInput,
ActivityIndicator,
View,
KeyboardAvoidingView,
ScrollView,
Image,
TouchableOpacity,
BackHandler,
Alert
} from "react-native";
export default class signUp extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
BackHandler.addEventListener("hardwareBackPress", this.backPressed);
}
componentWillUnmount() {
BackHandler.removeEventListener("hardwareBackPress", this.backPressed);
}
backPressed = () => {
let { routeName } = this.props.navigation.state;
console.log("route is : " + routeName);
if (routeName == "SignUp") {
console.log("ROUTE : " + routeName);
Alert.alert(
"Exit App",
"Do you want to exit?",
[
{
text: "No",
onPress: () => console.log("Cancel Pressed"),
style: "cancel"
},
{ text: "Yes", onPress: () => BackHandler.exitApp() }
],
{ cancelable: false }
);
return true;
} else {
return false;
}
};
render() {....}
}
路线
import { createStackNavigator, createAppContainer } from "react-navigation";
import React from "react";
import { View } from "react-native";
import Splash from "../screens/Splash";
import Home from "../screens/Home";
import SignUp from "../screens/SignUp";
import SignIn from "../screens/SignIn";
import ForgetPassword from "../screens/ForgetPassword";
const Routes = createStackNavigator(
{
Splash: {
screen: Splash,
navigationOptions: {
header: null
}
},
SignUp: {
screen: SignUp,
navigationOptions: () => ({
// header: null
title: "Sign Up",
headerLeft: null,
headerTintColor: "#fc0301",
headerStyle: {
borderBottomColor: "white"
},
headerTitleStyle: {
color: "#fc0301",
textAlign: "center",
flex: 1,
elevation: 0,
fontSize: 25,
justifyContent: "center"
}
})
},
SignIn: {
screen: SignIn,
navigationOptions: {
title: "Sign In",
headerRight: <View />,
headerTintColor: "#fc0301",
headerStyle: {
borderBottomColor: "white"
},
headerTitleStyle: {
color: "#fc0301",
textAlign: "center",
flex: 1,
elevation: 0,
fontSize: 25,
justifyContent: "center"
}
}
},
ForgetPassword: {
screen: ForgetPassword,
navigationOptions: {
header: null
}
},
Home: {
screen: Home,
navigationOptions: {
header: null
}
}
},
{
initialRouteName: "Splash"
}
);
export default createAppContainer(Routes);
【问题讨论】:
-
默认的 BackButton 功能是:向堆栈顶部移动一步,如果您已经在顶部,它将退出应用程序,
return true;以防止默认行为,按你的后退按钮不会有任何作用。 -
@HendEl-Sahli 嗯,简单的问题是当我在注册屏幕并单击硬件返回按钮时,它会将我移动到启动屏幕并且它是异常的!所以我的想法是我只需要在注册屏幕和一些我想要的屏幕我想禁用硬件后退按钮,而不是在我在这里谈论“BackHandler Android”的每个屏幕中
-
您的问题可以通过使用
SwitchNavigator来解决,它会呈现: 1. 启动画面。 2. 你的 StackNavigator 一旦你被引导到你的堆栈,backButton 将永远不会带你回到你的启动屏幕 -
@HendEl-Sahli 很抱歉这个评论,但我被卡住了,你有什么例子来实现一对一聊天“私人”而不是 Room 使用 firebase 作为后端!?
标签: javascript android reactjs react-native react-navigation