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 相关文章推荐
FireFox JavaScript全局Event对象
Jun 14 Javascript
jquery ztree实现下拉树形框使用到了json数据
May 14 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
May 12 Javascript
JavaScript通过filereader接口读取文件
May 10 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
Oct 16 jQuery
swiper实现异形轮播效果
Nov 28 Javascript
使用typescript改造koa开发框架的实现
Feb 04 Javascript
JavaScript实现简单动态表格
Dec 02 Javascript
微信小程序 实战小程序实例
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数据缓存技术
2007/02/14 PHP
php反射应用示例
2014/02/25 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
python逆序打印各位数字的方法
2018/06/25 Python
python计算两个数的百分比方法
2018/06/29 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
夜大自我鉴定
2013/10/31 职场文书
日语专业求职信
2014/07/04 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
学习礼仪心得体会
2014/09/01 职场文书
查摆问题整改措施
2014/10/24 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
学校重阳节活动总结
2015/03/24 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server