【React Native】实现Navigator Back回退_navigator返回原来页面数据不消失-程序员宅基地

技术标签: react_native  

http://www.jianshu.com/p/6e8d6214d8ab

http://www.jianshu.com/p/6e8d6214d8ab



【React Native】实现Navigator Back回退

字数698  阅读446  评论0 

  Android和iOS区别之一就是:Android拥有除了Home按键以外还有两个实体/虚拟按键,back和menu按键,虽然目前大多数Android的App已经支持侧滑返回上一层,或者在左上角都增加了一个返回按键,但是back按键的使用依然非常频繁。
  有一次一位重度Android使用的朋友用的我iPhone打开一个App,在他需要返回上一层时,连续的按了三下我的iPhone home按键右边的区域(Android back按键处),然后我就很尴尬的告诉他,我的手机没有back按键。由此可以看出back按键在Android用户心中的地位还是挺高的......


  好了废话太多了,在React Native中给我们提供了一个不错的Component——Navigator,能够实现和iOS的UINavigationController类似的功能,并且同时支持Android和iOS。并且facebook还在对Navigator优化升级,增加更多的功能。
  但是在Android使用过程中发现:当用户点击返回键时,界面并没有切回上一个界面,而是直接退出了程序。

  直接上解决代码:
  
  我们会用到一个叫做BackAndroid的Component,见名知意,就不多说了。下面说到的Component都是指Navigator切换的路由Component。

 import React, { Component } from 'react';
 import {
   ...
   Navigator,
   BackAndroid,
 } from 'react-native';

  在Component的构造方法中,持有一个func的回退方法。

constructor(){
  super();
  this.handleBack = this.handleBack.bind(this);
}

  然后在界面Component完成加载后,注册监听事件。

componentDidMount () {
  BackAndroid.addEventListener('hardwareBackPress', this.handleBack)
}

  在Component被卸载的时候注销监听。

componentWillUnmount () {
  BackAndroid.removeEventListener('hardwareBackPress', this.handleBack)
}

  然后静静地监听就好了...

handleBack(){
  var navigator = this.navigator;
  if (navigator && navigator.getCurrentRoutes().length > 1) {
    navigator.pop();
    return true;
  }else{
    return false;
  }
}

  如果想在首页双击back退出应用程序的话,可以这么做:

var firstClick = 0;
handleBack(){
  var navigator = this.navigator;
  if (navigator && navigator.getCurrentRoutes().length > 1) {
    navigator.pop();
    return true;
  }else{
    var timestamp = (new Date()).valueOf();
    if(timestamp-firstClick>2000){
      firstClick = timestamp;
      GSUtil.showToast('再按一次退出');
      return true;
    }else{
      return false;
    }
  }
}

  GSUtil.showToast这个是我写的一个类方法,专门实现类似Android的Toast提示控件,用到的是react-native-root-toast


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011904605/article/details/53427151

智能推荐

CANopen转PROFINET网关TCO-151在煤矿行业的应用-程序员宅基地

应用场景煤矿智能化是目前煤矿发展的一个重要趋势,而煤矿用清仓机系统是煤矿智能化的一个重要组成部分,该系统对煤矿井下的各式水仓和各种性状的煤泥均可以实现抽排、浓缩、脱水、装车自动化作业。在某矿山的一个自动化项目中,中控室的主控系统需要根据实时获取的现场人员对遥控器的操控信息来远程操控煤矿用清仓机系统进行井下作业,确保清仓机系统稳定、安全、高效工作。系统介绍该系统中,遥控器支持CANopen协议,中控室的主控系统采用西门子S7-1200 PLC,使用PROFINET通信接口。为了搭建主控系统S7-12

Java构造函数_java中的构造方法是一种特殊类型的方法,用于初始化对象。java构造函数在对象-程序员宅基地

Java构造函数文章目录Java构造函数前言Java构造函数的类型java的构造函数和方法之间的区别前言Java中的构造方法是一种特殊类型的方法,用于初始化对象。Java构造函数在对象创建时被调用。 它构造值,即提供对象的数据,这是为什么它被称为构造函数。注意:构造方法是类里的一个特殊的方法,他不能有返回值(包括void)。所谓构造方法,就是这个类在被实例化时(创建对象时)就要执行的方法,方法名为类的名字,一般的目的是为了给类进行一些初始化值。Java构造函数的类型(1)没参数的构造函数_java中的构造方法是一种特殊类型的方法,用于初始化对象。java构造函数在对象

生成bmp图片_bmpfileheader_t-程序员宅基地

#include <pshpack2.h>#include “stdio.h”#include “stdlib.h”#include “string.h”#define WIDTH 720#define HEIGHT 1280typedef long BOOL;typedef long LONG;typedef unsigned char BYTE;typedef unsigned long DWORD;typedef unsigned short WORD;//位图文件头_bmpfileheader_t

软工书面作业1——分析网易云音乐的创新-程序员宅基地

在音乐APP中,网易云音乐算是地地道道的后发者,它的诞生比酷狗音乐、酷我音乐、QQ音乐等晚了数年,却以其卓越的创新能力、非凡的用户体验,很快超越了诸多先发者,成为如今国内数一数二的移动音乐应用软件。以下,我将从几方面分析网易云音乐的创新致胜之道。1、功能创新:云歌单与音乐社交在酷狗音乐、QQ音乐等巨头早早占据移动音乐市场的背景下,2013年才姗姗来迟的网易云音乐以功能创新突破桎梏、赢得市场..._网易云音乐创新分析

解决TypeError: __init__() missing 1 required positional argument: 'on_delete'_报错__init__missing-程序员宅基地

试用Djiango的时候发现执行mange.py makemigrations 和 migrate是会报错,少位置参数on_delete,查了一下是因为指定外键的方式不对,改一下就OK了。代码如下:from django.db import models # Create your models here. class BookInfo(models.Model):"""model of..._报错__init__missing

HAProxy重启机制详解_haproxy reload-程序员宅基地

HAProxy重启机制介绍与连接失败的处理_haproxy reload

随便推点

HBase 访问zookeeper的问题_readonlyzkclient-程序员宅基地

HBase不访问zookeeper集群,而是访问本地zk,如果本地没有运行zk,则报错在没有运行zookeeper的linux上执行jar包(hadoop jar ...)访问HBase集群中的表时,提示如下信息,明显没有访问独立的ZK集群,而访问本地zk的2181端口,而本地却没有启动zk,故而报错。当然,如果放到启动了zk的linux上是可以正常执行的(但是,使用的zk依然是本的);同时..._readonlyzkclient

java文件路径中的两个反斜杠“\\“是什么意思_java双反斜杠是什么意思_Catnip001的博客-程序员宅基地

java的文件路径怎么写-Java基础-PHP中文网_java双反斜杠是什么意思

Android数据存储和访问-书籍的增删改查_安卓书籍存储-程序员宅基地

本次实验的任务是实现书籍的增删改查,其实我们可以对数据进行的操作也就无非四种,即CRUD。其中C代表添加(Create),R代表查询(Retrieve),U代表更新(Update),D代表删除(Delete)。每一种操作又各自对应了一种SQL命令,如果你比较熟悉SQL语言的话,一定会知道添加数据时使用insert,查询数据时使用select,更新数据时使用update,删除数据时使用delete。_安卓书籍存储

频域vs时域-程序员宅基地

若说简单了,可以这样讲,任何信号都是在频谱上的丰富分量,用频率和幅度坐标来表示,那么对信号的处理就变成在频谱上对信号幅度和频率的处理,需要的信号在其频率上保留其幅度,若需要的话可以加以放大,不要的信号,在该频率点上压制其幅度,如此就达到选频的目的! 首先傅立叶变换将时域和频率联系起来,这就是示波器和频谱仪的纽带!一项伟大的发明!在时域上对幅度和相位的处理可以很直观的表现在

Android动画使用详解-程序员宅基地

1.动画种类:View Animation: 视图动画在古老的Android版本系统中就已经提供了,只能被用来设置View的动画.Drawable Animation: 这种动画(也叫Frame动画、帧动画)其实可以划分到视图动画的类别,专门用来一个一个的显示Drawable的resources,就像放幻灯片一样。Property Animation: 属性动画只对Android 3.0(API 1

推荐文章

热门文章

相关标签