点击Android按钮跳转到React-native指定界面
16lz
2021-01-24
原文地址:http://blog.csdn.net/jiaweihaoku/article/details/53259596
这是一遍关于Android与ReactNative混合开发的探讨文章。
我们项目出现了一个需求,就是点击原生的android按钮跳转到指定的reactNative界面,关于这方面,在网上我是没有找到任何资料,只有通过自己摸索,终于找到了一条走的通的路,如果有大神有更好的办法,可以留言教教我。互相学习进步。
我想到的办法就是点击Android原生按钮向rn传值,rn再通过这个值来跳转到指定的界面。
首先是android跳转rn并传值:
第一步写一个类继承ReactContextBaseJavaModule如下:
[java] view plain copy
- public class IntentModule extends ReactContextBaseJavaModule {
- public IntentModule(ReactApplicationContext reactContext) {
- super(reactContext);
- }
- @Override
- public String getName() {
- return "IntentModule";
- }
- @ReactMethod
- public void dataToJS(Callback successBack, Callback errorBack){
- try{
- Activity currentActivity = getCurrentActivity();
- String result = currentActivity.getIntent().getStringExtra("data");
- if (TextUtils.isEmpty(result)){
- result = "没有数据";
- }
- successBack.invoke(result);
- }catch (Exception e){
- errorBack.invoke(e.getMessage());
- }
- }
- }
然后再写一个类将这个方法暴露出去,让rn可以调用:
[java] view plain copy
- ublic class AnDataReactPackage implements ReactPackage{
- @Override
- public List
createNativeModules(ReactApplicationContext reactContext) { - List
modules = new ArrayList<>(); - modules.add(new IntentModule(reactContext));
- return modules;
- }
- @Override
- public List
extends JavaScriptModule>> createJSModules() { - return Collections.emptyList();
- }
- @Override
- public List
createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList();
- }
- }
[java] view plain copy
- protected List
getPackages() { - return Arrays.
asList( - new MainReactPackage(),
- new AnDataReactPackage()
- );
- }
- };
[javascript] view plain copy
- getData() {
- NativeModules.IntentModule.dataToJS((msg) => {
- console.log(msg);
- let base = require('./constant');
- base.columnID = msg;
- //ToastAndroid.show('JS界面:从Activity中传输过来的数据为:' + base.columnID, ToastAndroid.SHORT);
- },
- (result) => {
- ToastAndroid.show('JS界面:错误信息为:' + result, ToastAndroid.SHORT);
- })
- }
[java] view plain copy
- componentDidMount() {
- let base = require('./constant');
- //ToastAndroid.show(base.columnID, ToastAndroid.SHORT);
- let id = base.columnID;
- if (id == "3") {
- const { navigator } = this.props;
- if (navigator) {
- navigator.push({
- name: 'secondPage',
- component: secondPage,
- })
- }
- } if (id == "4") {
- const { navigator } = this.props;
- if (navigator) {
- navigator.push({
- name: 'otherPage',
- component: otherPage,
- })
- }
- }
- }
更多相关文章
- Android(安卓)studio真机模拟调试
- cocos2dx3.2 Android环境配置
- 一篇文章看明白 Android(安卓)从点击应用图标到界面显示的过程
- [置顶] Android基于XMPP Smack Openfire开发IM(2)登录openfire
- android按home键不能回到自定义主界面
- Android(安卓)学习笔记之 Activity 简介
- 配置Android(安卓)SDK 开发环境
- 【转】Invalidate和postInvalidate的区别
- Android(安卓)apk快速定位、灰色按钮克星--DroidSword