react-native与原生界面相互跳转
一、添加MyIntentModule类,并继承ReactContextBaseJavaModule实现其方法和构造函数。在该类中添加方法,注意:方法头要加@ReactMethod
public
class
MyIntentModule
extends
ReactContextBaseJavaModule {
public
MyIntentModule(ReactApplicationContext reactContext) {
super
(reactContext);
}
@Override
public
String getName() {
return
"IntentMoudle"
;
}
//注意:记住getName方法中的命名名称,JS中调用需要
@ReactMethod
public
void
startActivityFromJS(String name, String params){
try
{
Activity currentActivity = getCurrentActivity();
if
(
null
!=currentActivity){
Class toActivity = Class.forName(name);
Intent intent =
new
Intent(currentActivity,toActivity);
intent.putExtra(
"params"
, params);
currentActivity.startActivity(intent);
}
}
catch
(Exception e){
throw
new
JSApplicationIllegalArgumentException(
"不能打开Activity : "
+e.getMessage());
}
}
@ReactMethod
public
void
dataToJS(Callback successBack, Callback errorBack){
try
{
Activity currentActivity = getCurrentActivity();
String result = currentActivity.getIntent().getStringExtra(
"data"
);
if
(TextUtils.isEmpty(result)){
result =
"没有数据"
;
}
successBack.invoke(result);
}
catch
(Exception e){
errorBack.invoke(e.getMessage());
}
}
//注意:startActivityFromJS、dataToJS方法添加RN注解(@ReactMethod),否则该方法将不被添加到RN中
}
public
class
MyReactPackage
implements
ReactPackage {
@Override
public
List<nativemodule> createNativeModules(ReactApplicationContext reactContext) {
return
Arrays.<nativemodule>asList(
new
MyIntentModule(reactContext));
}
@Override
public
List<viewmanager> createViewManagers(ReactApplicationContext reactContext) {
return
Collections.emptyList();
}
}
@Override
protected
List<reactpackage> getPackages() {
return
Arrays.<reactpackage>asList(
new
MainReactPackage(),
new
MyReactPackage()
);
}
import
{
NativeModules,
TouchableNativeFeedback,
ToastAndroid
}from
'react-native'
_onPressButton() {
NativeModules
.IntentMoudle
.startActivityFromJS(
"com.myreactdemo.MyActivity"
,
null
);
}
render() {
return
(
<View>
<TouchableNativeFeedback onPress={
this
._onPressButton}>
<Text>跳转到原生页面</Text>
TouchableNativeFeedback>
<View>
);
}
例,Activity1调用Activity2
Intent intent = new Intent(currentActivity.this , MainActivity.class);
startActivity(intent);
Activity1隐式调用Activity2时需要在AndroidManifest.xml文件中配置Activity2的action和category,具体添加下面的代码到Activity2的定义中
<intent-filter>
<action android:name="myaction2"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="mycategory" />
</intent-filter>
接着同样使用intent来启动Activity,代码如下:
Intent intent = new Intent("myaction2");
startActivity(intent);
这样就可以启动Activity2
注:在使用intent隐式调用Activity时会遇到多个Activity的intent-filter中的action和category相同时,这时android会先弹出一个选择界面的窗口,显式要启动的Activity列表,根据用户的选择来启动Activity,如Activity2和Activity3的action和category相同
<Activity android:name=".Activity2">
<intent-filter>
<action android:name="myaction2"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="myCategory" />
</intent-filter>
</Activity>
<Activity android:name=".Activity3">
<intent-filter>
<action android:name="myaction2"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="myCategory" />
</intent-filter>
</Activity>
启动Activity代码如下:
Intent intent = new("action2");
intent.addCategory("myCategory");
startActivity(intent);
这时就会弹出Acvity的选择窗口,选择启动activity2还是activity3
react-native与原生界面相互跳转的更多相关文章
- React Native 导入原生Xcode项目总结与记录
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- React Native移植原生Android
(一)前言 之前已经写过了有关React Native移植原生Android项目的文章,不过因为RN版本更新的原因吧,跟着以前的文章可能会出现一些问题,对于初学者来讲还是会有很多疑难的困惑的,而且官方 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- React Native之原生模块的开发(Android)学习笔记
目录 1.为什么我们需要原生模块开发 2.开发Android原生模块的主要流程 3.原生模块开发实战 1.为什么我们需要原生模块开发? 我们在用RN开发App的时候,有时候需要用到一些原生模块 ...
- React native和原生之间的通信
RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原生模块之 间通信,主要有三种方法: 1)使用回调函数Callback,它提供了一个函数来把返回值传回给JavaScript. 2)使 ...
- React Native与原生项目连接与发布
前面的各种环境配置按照官方文档一步一步来,挺详细,宝宝在这里就不多说废话了. 其次,前面的配置,我参照的这个博主的文章React Native 集成到iOS原生项目 下面是宝宝掉过的坑(半径15M): ...
- [转]Shared——React Native与原生关系理解与对比
零.关系理解 这个是我对RN和原生关系的理解.简单解释下这个图. RN js编写完业务代码后,通过react-native bundle命令,将代码分别编译成一个index.ios.bundle和in ...
- 【React Native开发】React Native移植原生Android项目(4)
),React Native技术交流4群(458982758),请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...
- react native与原生的交互
一.交互依赖的重要组件 react native 中如果想要调用ios 中相关的方法,必须依赖一个重要的组件nativemodules import { NativeModules } from ' ...
随机推荐
- [SHOI2002]百事世界杯之旅
题目:"--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯. ...
- linux进程切换问题
#define switch_to(prev,next,last) do { \ unsigned long esi,edi; \ asm volatile("pushfl\n\t" ...
- Arcgis Server for JavaScript API之自定义InfoWindow
各位看到这个标题不要嫌烦,因为本人最近一直在研究相关的问题,所以相关文章也只能是这些,同时希望看过我的文章的朋友,我的文章能够给你帮助. 在前面的两篇相关的文章里面,实现InfoWindow是通过di ...
- springboot整合actuator,进行运维监控
首先引入依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 树莓派-开启spi
1. sudo raspi-config #进入树莓派配置页 2. #进入每5项,进入启用spi即可
- winfom实现关闭后一直运行
using PLog; using System; using System.Collections.Generic; using System.Diagnostics; using System.L ...
- POJ-1128-Frame Stacking
链接:https://vjudge.net/problem/POJ-1128 题意: 每张图片上面画了一些边框,给出这些边框叠在一起后的图片,图片边框一定是由一个字母表示并且每条边至少三个字符,输入保 ...
- P3225 [HNOI2012]矿场搭建
传送门 对于一个点双联通分量,如果它连接了两个或更多割点 那么不论哪个点GG都有至少一条路通到其他的点双联通分量,所以我们不用考虑 如果它只连接一个割点,如果这个割点GG,那整个块也一起GG,所以要再 ...
- java重载equals和hashCode
class Employee { private int salary; private java.util.Date hireDay; private String name; public int ...
- setlocal 本地变量详解
命令 setlocal (开启本地变量) endlocal (结束本地变量) 很多新手不理解这句话是什么意思,在批处理中有什么作用. 其实在批处理中 setlocal 作用很大,配合 endloca ...