最近项目中接入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;
}
但是好像并没有什么卵用~~~~~