gxsshallot / react-native-pure-navigation-bar

A fully customizable navigation bar in React Native.
MIT License
96 stars 19 forks source link

无法返回原生Activity #17

Open jsbsdbd1025 opened 5 years ago

jsbsdbd1025 commented 5 years ago
"react-native-pure-navigation-bar": "^1.4.9",
"react-native": "0.58.0",
"react-native-gesture-handler": "^1.1.0",
"react-navigation": "^3.5.1",

在Andorid实践RN作为组件过程中,从原生Activity跳转RN实现的页面。 在RN内部路由跳转(包括物理按键返回)没问题,但是点击返回按键或者物理按键均无法返回。后来发现快速点击可以返回到原生页面(断点模式下也可以)。大佬有没有什么解决方法。


确认只使用react-navigation时,跳转正常

gxsshallot commented 5 years ago

@jsbsdbd1025 对于Android我不是太懂,我说下iOS上的解决思路吧,Android应该也差不多。 场景是:原生部分页面A,跳转到RN部分页面B,现在想B回退到A。 方案:在页面B上,render中,渲染NaviBar组件,组件设置onLeft属性:

onLeft={() => {NativeModules.xxx.pop(); return false;}}

通过onLeft,调用原生部分的xxx模块的导出方法pop,来实现两个原生页面直接的回退功能。 具体代码,可以参照src/navibar.js中的逻辑,在componentDidMount绑定了BackHandler的监听,调用了_clickBack方法,_clickBack会调用_clickButton,里面有一行const doDefaultAction = this.props[clickKey] && this.props[clickKey](index);,是在调用你自定义的onLeft回调,这时onLeft返回false,则不调用默认回退处理。正常点击视图上的回退按钮,也会进入_clickButton

jsbsdbd1025 commented 5 years ago

@jsbsdbd1025 对于Android我不是太懂,我说下iOS上的解决思路吧,Android应该也差不多。 场景是:原生部分页面A,跳转到RN部分页面B,现在想B回退到A。 方案:在页面B上,render中,渲染NaviBar组件,组件设置onLeft属性:

onLeft={() => {NativeModules.xxx.pop(); return false;}}

通过onLeft,调用原生部分的xxx模块的导出方法pop,来实现两个原生页面直接的回退功能。 具体代码,可以参照src/navibar.js中的逻辑,在componentDidMount绑定了BackHandler的监听,调用了_clickBack方法,_clickBack会调用_clickButton,里面有一行const doDefaultAction = this.props[clickKey] && this.props[clickKey](index);,是在调用你自定义的onLeft回调,这时onLeft返回false,则不调用默认回退处理。正常点击视图上的回退按钮,也会进入_clickButton

react-navigation 应该是判断了路由队列的大小,如果当前页面是第一页的话 Android中应该是调的BackHandler.exitApp()方法 其他正常调navigation.goBack()