React 调用Native原生方法

流程

Native端
  1. 创建类A继承ReactContextBaseJavaModule,并自定义JS需要调用的方法,主要需要加上 @ReactMethod注解;
  2. 创建类B实现ReactPackage接口,并实现其createNativeModules方法;
  3. 在包含React的Activity页面上使用ReactInstanceManager.builder()添加刚才实现的ReactPackage
React端
  1. 创建A.js文件,导入NativeModules,并通过实现Android端A类的getName方法返回的字符串导出;
  2. 在需要调用的位置引入模块,执行调用。

Native代码

ToastModule.java

public class ToastModule extends ReactContextBaseJavaModule {

    private static final String DURATION_SHORT_KEY = "SHORT";
    private static final String DURATION_LONG_KEY = "LONG";

    public ToastModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "ToastExample";
    }

    @Nullable
    @Override
    public Map<String, Object> getConstants() {
        final Map<String, Object> constants = new HashMap<>();
        constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
        constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
        return constants;
    }

    @ReactMethod
    public void show(String message, int duration) {
        Toast.makeText(getReactApplicationContext(), message, duration).show();
    }

    @ReactMethod
    public void getData(String text, Callback callback) {
        callback.invoke("test", text);
    }
}

ToastReactPackage.java

public class ToastReactPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new ToastModule(reactContext));
        return modules;
    }

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

Activity.java

// MainReactPackage必须添加
mReactInstanceManager = ReactInstanceManager.builder()
                .setApplication(getApplication())
                .setBundleAssetName("index.android.bundle")
                .setJSMainModulePath("index")
                .addPackage(new MainReactPackage())
                .addPackage(new ToastReactPackage())
                .setUseDeveloperSupport(BuildConfig.DEBUG)
                .setInitialLifecycleState(LifecycleState.RESUMED)
                .build();

React代码

ToastAn.js

import {NativeModules} from 'react-native';
module.exports = NativeModules.ToastExample;

UI.js

 _toast() {
    ToastExample.getData("显示吐司内容", (arg1, arg2) => {
      ToastExample.show(arg1 + arg2, ToastExample.SHORT);
    });
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值