react native 调用android activity
来源:互联网 发布:唐嫣香港知乎 编辑:程序博客网 时间:2024/05/21 06:34
1.react native 调用原生必须继承一个SimpleViewManager
1.但是SimpleViewManager 需要View的子类才能继承 而我们activity最终继承的是Context,接下来我就需要获取activity的view
2.首先在外部获取activity的View 众所周知我们要获取某个class 有两种方法一个是直接new,一个是通过反射获取。但是这两者都行不通的
3.查看android系统底层源码你会发现LocalActivityManger通过startActivity(String id,Intent intent),可以与指定的activity绑定,并且返回一个 window,LocalActivityManager 可以同时管理多个activity
4.首先我们拿到LocalActivityManger对象,然后再从获取DecorView
补充下DecorView是整个ViewTree的最顶层View,它是一个FrameLayout布局,代表了整个应用的界面。在该布局下面,有标题view和内容view这两个子 元素(不懂得可以看底层View源码解读)
mActivityManager = new LocalActivityManager(this, true);
mActivityManager .dispatchCreate(savedInstanceState);
View view = mActivityManager.startActivity("", new Intent(this, TrendTwoActivity.class)).getDecorView();5.上面的这样就结束了,想多了这样还是会报错的6.获取activity的view必须要到activity onPause和onResume 进行配置两个方法mActivityManager.dispatchPause(isFinishing());和mActivityManager.dispatchResume();
这样就可以拿到了activity中的view
有人会问了SimpleViewManager没有onPause和onResume两个生命周期方法,对确实没有,
理解react native的启动机制的就知道react native 启动都是依赖原生的activity来启动的,我们可以到MainActivity中去拿到View再进行存储,根据原生UI组件再获取进行返回,(原生ui组件的不会去看react native官网或者搜索网上,有很多资料)ok完美解决,现在我们贴出源码给大家参考下
public class MainActivity extends ReactActivity { @Override protected String getMainComponentName() { return "xxx"; } LocalActivityManager mActivityManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //获取走势的view if( MainApplication.trendView==null) { mActivityManager = new LocalActivityManager(this, true); mActivityManager.dispatchCreate(savedInstanceState); View view = mActivityManager.startActivity("", new Intent(this, TrendTwoActivity.class)).getDecorView(); MainApplication.trendView = view; } } @Override protected void onPause() { super.onPause(); mActivityManager.dispatchPause(isFinishing()); } @Override protected void onResume() { super.onResume(); mActivityManager.dispatchResume(); }/** * Created by kim * on 2017/10/24 0024. */public class TrendView extends SimpleViewManager<View> { @Override public void onCatalystInstanceDestroy() { super.onCatalystInstanceDestroy(); } @Override public String getName() { return "TrendView"; } @Override protected View createViewInstance(ThemedReactContext reactContext) { Log.d("view___",MainApplication.trendView+""); return MainApplication.trendView; }}
阅读全文
0 0
- react native 调用android activity
- react native js调用android原生activity
- React-Native:调用(Android)Native方法
- [Android中react-native调用Native]
- React Native调用Android原生模块
- React Native调用Android原生组件
- React native 调用Android原生模块
- React Native调用Android相机图库
- React Native调用Android相机图库
- react-native调用Android原生模块
- React Native:JS调用Android本地方法
- react-native调用Android的原生方法
- react-native 调用 native 步骤
- Android Fragment Activity View中集成React Native页面
- (十二)React Native跳转到android原生界面Activity
- Android Fragment Activity View中集成React Native页面
- React Native 与 Android原生Activity互相跳转页面
- 在Android原生中嵌入React Native,进而React Native调用原生
- 圆
- 51nod 1451 合法三角形(暴力,思维)
- 从编程小白到架构总监:大型网站系统架构演化之路
- DFLabelSizeFit使用方法
- ButterKnife 使用方法
- react native 调用android activity
- windows 80端口占用问题
- 人工智能(七)逻辑Agent
- ZooKeeper基础与集群搭建资料汇总
- C++运算符重载
- Tensorflow深入mnist程序整理
- XRecyclerView多布局2
- 虚拟机连不上网,ping时报错,connect network is unreachable
- OkHttpUtils的封装