专栏首页刘晓杰RN监听返回键

RN监听返回键

BackAndroid已经被废弃。改用BackHandler 关键代码

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

    componentWillUnmount() {
        if (Platform.OS === 'android') {
            this.listener.remove('hardwareBackPress');
        }
    }

    onBackAndroid = () => {
        const navigator = this.refs.navigator;//**************************
        const routers = navigator.getCurrentRoutes();
        console.log('当前路由长度:' + routers.length);
        if (routers.length > 2) {
            navigator.pop();
            return true;//接管默认行为
        } else {
            //到了主页了
            if (this.lastBackPressed && this.lastBackPressed + 2000 >= Date.now()) {
                //最近2秒内按过back键,可以退出应用。
                return false;
            }
            this.lastBackPressed = Date.now();
            ToastAndroid.show('再按一次退出应用', ToastAndroid.SHORT);
            return true;
        }
        // return false;//默认行为

    };

上面用到了this.refs.navigator,贴一下代码

render() {
        return (
            <NavigationExperimental.Navigator
                initialRoute={{name: 'TestComp', component: TestComp}}
                //配置场景
                ref="navigator"
                configureScene={
                    (route) => {
                        return NavigationExperimental.Navigator.SceneConfigs.FloatFromRight;
                    }
                }
                renderScene={
                    (route, navigator) => {
                        let Component = route.component;
                        return <Component {...route.params} navigator={navigator}/>
                    }
                }/>
        );
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RN刷新回调

    提莫队长
  • 编译时注解(三)Arouter源码讲解

    项目中我们有时需要跨模块startActivity,但是这样需要配置menifest,不方便。这时就需要阿里的一个路由框架Arouter Arouter的使用...

    提莫队长
  • Android:Content Provider数据共享

    ContentProvider 属于Android应用程序的组件之一,作用是对外共享数据。我们可以通过ContentProvider把应用中的数据共享给其他应用...

    提莫队长
  • UDP与TCP在Socket的使用

    聚沙成塔
  • 在背景图上面加滤镜层之后添加内容

    wfaceboss
  • lombok使用基础教程

    前言 lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。在很多工具类的项目中都有这个功能。比如dagger。 通俗的说,lombok可以通过...

    Ryan-Miao
  • SQL自动化审核工具测试

    最近在做一些SQL审核的事情,这里讲SQL审核的前期工作简单总结一下,做的一些测试的结果,希望对大家认识这两个自动化审核工具有所帮助。

    AsiaYe
  • c++ 网络编程(四)TCP/IP LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题

    原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html

    徐飞机
  • [计算机视觉论文速递] 2018-05-16

    这篇文章有4篇论文速递信息,涉及单目图像深度估计、6-DoF跟踪、图像合成和动作捕捉等方向(含1篇CVPR 2018论文和1篇ICRA 2018论文)。

    Amusi
  • linux下压缩与解压命令大全

    .tar      解包:tar xvf FileName.tar     打包:tar cvf FileName.tar DirName (注:tar是打包,...

    Sindsun

扫码关注云+社区

领取腾讯云代金券