RN原生调用一:安卓Toast

首先安卓原生方法:Toast.makeText(getApplicationContext(), "默认的Toast", Toast.LENGTH_SHORT); 

在RN中js如何使用原生的这个方法呢?

一·创建方法类(包含你所要实现的方法);

二·包管理注册这个类 成为一个包

三·将这个包 添加注入主文件中:MainApplication.java

一:创建一个类 

package com.pp;

import android.widget.Toast;

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

class ToastModule extends ReactContextBaseJavaModule {
    public ToastModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "ToastExample";
    }
    
    @ReactMethod
    public void show(String message) {
        Toast.makeText(getReactApplicationContext(), message,Toast.LENGTH_SHORT).show();
    }
}

 这个 ToastModule类继承(extends) ReactContextBaseJavaModule  并且实现了构造函数-getName()返回模块名称 --以及所要实现的方法着三种

在Rn的js中就可以通过 NativeModules.ToastExample.show来调用show这个方法啦!但是别急 下一步注册包

二·创建一个类 

package com.pp;

import com.facebook.react.ReactPackage;
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;



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;
    }
}
这个 AnExampleReactPackage类 实现了 ReactPackage这个类  然后就 ToastModule加入  我们就成之位package包吧。
三·交给老大MainAppliction.java
package com.pp;

import android.app.Application;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

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

public class MainApplication extends Application implements 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;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

 注意逗号哦

对了 需要重新编译才行哦。 

原文地址:https://www.cnblogs.com/allenxieyusheng/p/7473576.html