ReactNative 在用react-navigation组件时,没有 navigator.getCurrentRoutes(); 这个方法时,Android监听返回键,在某个页面返回键退出应用

在之前项目中,在进行返回键退出应用时,应用的代码如下:

componentWillMount()
{if (Platform.OS === 'android'){BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);}
}
componentWillUnmount()
{if (Platform.OS === 'android') {BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid);}
}

onBackAndroid = () => {

    const navigator = this.refs.navigator;

    const { navigator } = this.props;

    const routers = navigator.getCurrentRoutes();

    console.log('当前路由长度:'+routers.length);

   if (routers.length > 1) {

        navigator.pop();

        return true;//接管默认行为

  }

     return false;//默认行为

};

可是在后面的项目中,用的是  react-navigation  这个组件,这个组件中没有getCurrentRoutes()这个方法了,所以没办法用上面的代码了。如果我们现在依旧想要达到在主页连续进行两次返回键,则退出APP怎么办呢?如下代码:

componentWillMount() {if (Platform.OS === 'android') {BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);}
}componentWillUnmount(){if (Platform.OS === 'android') {BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid);}
};

上面这一部分依旧不变,

onBackAndroid = () => {//禁用返回键if(this.props.navigation.isFocused()){//判断   该页面是否处于聚焦状态if (this.lastBackPressed && this.lastBackPressed + 2000 >= Date.now()) {BackHandler.exitApp();//直接退出APP}else{this.lastBackPressed = Date.now();ToastAndroid.show('再按一次退出应用', 1000);//提示return true;}}
}

这里,我们用到的是this.props.navigation.isFocused() 的isFocused()这个方法来判断,改页面是否处于聚焦状态,如果是,则进行连续点击两次返回键,退出APP。如果不是,则执行返回操作。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部