Vir*_*t18 23 navigation back-button back react-native react-native-android
我想检查当设备后退按钮被击中时是否有多个屏幕在堆栈上.如果是,我想显示前一个屏幕,如果没有,我想退出应用程序.
我已经检查了一些示例,但是那些使用了BackAndroid和Navigator.但他们俩都被弃用了.BackHandler是BackAndroid的替代品.我可以使用props.navigation.goBack(null)显示上一个屏幕.
但是我无法找到用于在堆栈中查找屏幕计数的代码.我不想使用已弃用的Navigator!
Vir*_*t18 54
此示例将向您显示通常在大多数流程中预期的返回导航.您必须根据预期的行为向每个屏幕添加以下代码.有两种情况:1.如果堆叠屏幕超过1个,设备后退按钮将显示前一个屏幕.2.如果堆叠中只有一个屏幕,设备后退按钮将退出应用程序.
案例1:显示上一个屏幕
import { BackHandler } from 'react-native';
constructor(props) {
super(props)
this.handleBackButtonClick = this.handleBackButtonClick.bind(this);
}
componentWillMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick);
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
}
handleBackButtonClick() {
this.props.navigation.goBack(null);
return true;
}
Run Code Online (Sandbox Code Playgroud)
重要提示:不要忘记在构造函数中绑定方法并删除componentWillUnmount中的侦听器.
案例2:退出应用程序
在这种情况下,无需在要退出应用程序的屏幕上处理任何内容.
重要提示:这应该只是堆栈屏幕.
Aur*_*ana 31
在功能组件中:
import { BackHandler } from 'react-native';
function handleBackButtonClick() {
navigation.goBack();
return true;
}
useEffect(() => {
BackHandler.addEventListener('hardwareBackPress', handleBackButtonClick);
return () => {
BackHandler.removeEventListener('hardwareBackPress', handleBackButtonClick);
};
}, []);
Run Code Online (Sandbox Code Playgroud)
import { BackHandler } from 'react-native';
constructor() {
super();
this.handleBackButtonClick = this.handleBackButtonClick.bind(this);
}
componentWillMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick);
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
}
handleBackButtonClick() {
//this.props.navigation.goBack(null);
BackHandler.exitApp();
return true;
}
handleBackButtonClick() {
return true; // when back button don't need to go back
}
Run Code Online (Sandbox Code Playgroud)
在功能组件中
import { BackHandler } from 'react-native';
function handleBackButtonClick() {
navigation.goBack();
return true;
}
useEffect(() => {
BackHandler.addEventListener('hardwareBackPress', handleBackButtonClick);
return () => {
BackHandler.removeEventListener('hardwareBackPress', handleBackButtonClick);
};
}, []);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42702 次 |
| 最近记录: |