ReactNative-JS 调用原生方法实例代码


Posted in Javascript onOctober 08, 2016

ReactNative-JS 调用原生方法实例代码

第一步首先创建ReactNative 模块类继承ReactContextBaseJavaModule

package com.mixture;

import android.content.Context;
import android.widget.Toast;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

/**
 * Created by Administrator on 2016/9/22.
 */

public class MyNativeModule extends ReactContextBaseJavaModule {

  public static final String REACTCLASSNAME = "MyNativeModule";
  private Context mContext;

  public MyNativeModule(ReactApplicationContext reactContext) {
    super(reactContext);
    mContext = reactContext;
  }

  @Override
  public String getName() {
    return REACTCLASSNAME;
  }

  /**
   * 必须添加反射注解不然会报错
   * 这个方法就是ReactNative将要调用的方法,会通过此类名字调用
   * @param msg
   */
  @ReactMethod
  public void callNativeMethod(String msg) {
    Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
  }
}

第二步创建一个React包管理器实现ReactPackage将每个模块放到模块集合中

package com.mixture;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Created by Administrator on 2016/9/22.
 */

public class MyReactPackage implements ReactPackage {

  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
    List<NativeModule> modules = new ArrayList<>();
    modules.add(new MyNativeModule(reactContext));
    return modules;
  }

  @Override
  public List<Class<? extends JavaScriptModule>> createJSModules() {
    return Collections.emptyList();
  }

  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Collections.emptyList();
  }
}

第三步在应用入口注册这个React包管理器

package com.mixture;

import android.app.Application;
import android.util.Log;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    protected boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          //在应用中注册这个包管理器
          new MyReactPackage()
      );
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }
}

第四步就是在ReactNative中调用react-native中提供一个NativeModules通过模块名字和方法名字进行调用

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, {Component} from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  NativeModules,
} from 'react-native';

class Mixture extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.instructions} onPress={() => this.onClick()}>
          调用用原生方法
        </Text>
      </View>
    );
  }

  /**
   * 调用原生方法
   */
  onClick() {
    NativeModules.MyNativeModule.callNativeMethod('成功调用原生方法');
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('Mixture', () => Mixture);

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
Javascript的各种节点操作实例演示代码
Jun 27 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
Jul 10 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
Dec 13 Javascript
一个简单的Node.js异步操作管理器分享
Apr 29 Javascript
jQuery简单实现网页选项卡特效
Nov 24 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
微信小程序 网络请求(post请求,get请求)
Jan 17 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
Apr 28 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 Javascript
jQuery实现动态向上滚动
Dec 21 jQuery
微信小程序 实战小程序实例
Oct 08 #Javascript
node.js实现博客小爬虫的实例代码
Oct 08 #Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 #Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 #Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 #Javascript
微信小程序 canvas API详解及实例代码
Oct 08 #Javascript
微信小程序 animation API详解及实例代码
Oct 08 #Javascript
You might like
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
Js基础学习资料
2010/11/23 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
Python contextlib模块使用示例
2015/02/18 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
产品质量承诺范本
2014/03/31 职场文书
贪污检举信范文
2015/03/02 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书