Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

无法返回原生Activity #17

Open
jsbsdbd1025 opened this issue Apr 1, 2019 · 2 comments
Open

无法返回原生Activity #17

jsbsdbd1025 opened this issue Apr 1, 2019 · 2 comments

Comments

@jsbsdbd1025
Copy link

jsbsdbd1025 commented Apr 1, 2019

"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
Copy link
Owner

@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
Copy link
Author

@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()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants