Android 集成React-native 在Fragment中获取传递给RN的属性(Bundle类型)

在把公司的项目集成RN的时候,遇到了许多问题,由于公司的项目全部都用了Fragment来显示页面。然而RN的ReactActivity是继承Activity的,无法在这个项目使用,只能把RN集成到Fragment上,由于一些数据要从原生里面拿到。但是调用原生数据callback,Promises ,事件方式:RCTDeviceEventEmitter 都是异步操作。不能满足某些需求

解决方法---ReactRootView缓存管理器
在继承ReactActivity的子类上只要重写createReactActivityDelegate方法就可以了

 @Override
    protected ReactActivityDelegate createReactActivityDelegate() {
        return new ReactActivityDelegate(this, getMainComponentName()) {
            @Nullable
            @Override
            protected Bundle getLaunchOptions() {
                return ;
            }
        };
    }

在Fragment上改动也不大,使用

ReactRootView.startReactApplication(
      ReactInstanceManager reactInstanceManager,
      String moduleName,
      @Nullable Bundle initialProperties)

*第一步

public static ReactNativeFragment newInstance(Bundle launchOptions) {
        ReactNativeFragment fragment = new ReactNativeFragment();
        Bundle args = new Bundle();
        args.putBundle("bundle", launchOptions);
        fragment.setArguments(args);
        return fragment;
    }

*第二步

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mBundle = getArguments().getBundle("bundle");
        }
}

*第三步

mReactRootView.startReactApplication(getReactNativeHost().getReactInstanceManager(), "xxx", mBundle);

*第四步

   @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        delegate = new ReactActivityDelegate(getActivity(), "xxx") {
            @javax.annotation.Nullable
            @Override
            protected Bundle getLaunchOptions() {
                return mBundle;
            }
        };
    }

然后再RN中界面就使用props获取就可以了

  componentWillMount() {
        alert(this.props.reactPage)
    }

在补充一丢丢

 Bundle bundle = new Bundle();
        bundle.putString(reactPage,"111");
        FragmentUtils.replace(this, ReactNativeFragment.newInstance(bundle));

最后!!!刚刚学习react native 真不容易,填完一个坑,又来一个坑。。。。。。。。。。

你可能感兴趣的:(Android 集成React-native 在Fragment中获取传递给RN的属性(Bundle类型))