集成跳转以及传值
步骤:
1.创建一个类继承 ReactPackage(重写的两个方法)
//创建原声模块 注册绑定
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> list = new ArrayList<>();
list.add(new ToastModule(reactContext));
list.add(new CommunicationMoudle(reactContext));
return list;
}
//创建原生UI组件注册绑定
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
//UI组件
List<ViewManager> list = new ArrayList<>();
return list;
}
2. 创建一个类继承于 ReactContextBaseJavaModule(重写两个方法)
public CommunicationMoudle(ReactApplicationContext reactContext) {
super(reactContext);//自身构造方法
}
//这个返回一个名字 在RN中调用这个名字
@Override
public String getName() {
return "AndroidTab";
}
//===================以下是自己写的方法,必须是无返的=======================================
//RN----->Android 通过参数进行传值
@ReactMethod
public void RNtoAndroid(String str1,String str2){
Toast.makeText(getReactApplicationContext(),str1+str2,Toast.LENGTH_LONG).show();
}
//Android 给RN传值
@ReactMethod
public void AndroidToRNCallback(Callback callback){
callback.invoke("Android");
}
// 第二种方式 RN给android 传 Android 给Rn传
@ReactMethod
public void AnroidToRNPromise(String msg,Promise promise){
Toast.makeText(getReactApplicationContext(),msg,Toast.LENGTH_LONG).show();
promise.resolve("Android 给 RN传一个值");
}
//带值跳转到 Activity2 ================>RN带值跳转Activity
@ReactMethod
public void RNGOTO(String name,String age){
Intent intent = new Intent(getReactApplicationContext(),Main2Activity.class);
intent.putExtra("name",name);
intent.putExtra("age",age);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getReactApplicationContext().startActivity(intent);
}
这是RN页面写的东西
NativeModules 导入这个包
import { View, Text, NativeModules, Button } from "react-native";
//RN跳Android
AA = () => {
NativeModules.AndroidTab.RNtoAndroid("撒扩大解放了喀什", "第二个参数");
};
//Android 跳RN 第一种方式
CC = () => {
NativeModules.AndroidTab.AndroidToRNCallback(tt => {
alert(tt);
});
};
//Android 跳RN 第二种方式
DD = () => {
NativeModules.AndroidTab.AnroidToRNPromise("李四").then(result => {
alert(result);
});
};
//这是RN跳到Activity 页面(带值跳转)
EE = () => {
NativeModules.AndroidTab.RNGOTO("李四", "sdf手动阀手动阀");
};
//点击事件
<View>
<Button onPress={this.AA} title="RNtoAndroid" />
<Button onPress={this.CC} title="AndroidToRNCallback" />
<Button onPress={this.DD} title="AnroidToRNPromise" />
<Button onPress={this.EE} title="RNGOTO" />
</View>
一定要牢记:运行的时候,先把RN关了再Rebuite 然后就可以运行了 ,如果不行,就多Rebuite几次