android 接入 reactnative 之Js调用原生方法

最近项目中接入RN 其中最基本的一个问题就是处理返回事件问题 这里我们需要一个中间变量来帮我完成这个事件

新建一个类  继承RN的方法


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 "NativeNavigation";
    }
    @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 backToNative() {
        MyApplication.activityList.get(MyApplication.activityList.size()-1).finish();
    }
}

其中getName为协商好的方法名称      backToNative为我们自己写的一个供js调用的方法(PS : 需要用@ReactMethod来注解   并且一定是void )


接下来  继续  有一个类


public class AnExampleReactPackage implements ReactPackage {

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

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

}

 modules.add(new ToastModule(reactContext));就是将我们刚刚的类添加进来  大致工作已经基本完成接下来注册一下就OK了  


在你自己建的MyReactNativeActivity中  增加一个方法

  mReactRootView = new ReactRootView(this);
            mReactInstanceManager = ReactInstanceManager.builder()
                    .setApplication(getApplication())
                    .setBundleAssetName("index.android.bundle")
                    .setJSMainModulePath("index")
                    .addPackage(new MainReactPackage())
                    .addPackage(new AnExampleReactPackage())  (PS: 就是这里)
                    .setUseDeveloperSupport(BuildConfig.DEBUG)
                    .setInitialLifecycleState(LifecycleState.RESUMED)
                    .build();
            // The string here (e.g. "MyReactNativeApp") has to match
            // the string in AppRegistry.registerComponent() in index.js
            mReactRootView.startReactApplication(mReactInstanceManager, "kefu", null);
            setContentView(mReactRootView);

网上还有不少说法  就是在MyApplication中继承ReactApplication  然后实现方法

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

        @Override
        protected List<ReactPackage> getPackages() {
            return Arrays.<ReactPackage>asList(
                    new MainReactPackage(),
                    new AnExampleReactPackage()
                    //新添加需要注册的模块
            );
        } };

    @Override
    public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
    }
但是好像并没有什么卵用~~~~~
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_38163856/article/details/80321425
文章标签: Android ReactNative
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

android 接入 reactnative 之Js调用原生方法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭