React Native 学习笔记十六(细节分析)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:42   1346   0
//创建一个ReactRootView,把它设置成Activity的主视图
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
// 设置模块的主入口的JS文件为index.android.js
.setJSMainModuleName("index.android")
// 一般情况下 创建父类继承自MainReactPackage 获取已经创建的package集合 然后将新的package添加进去
// 在这里为了省事我就不再创建
.addPackage(new MainReactPackage())
.addPackage(new RegistPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
// 再当前主视图中 添加对应视图中

mReactRootView.startReactApplication(mReactInstanceManager, "MyApp", null);

嵌入原生 这段代码是 不能省略的 但是之前我为了省事 没有做package集合 这次看了一下源码 发现 MainReactPackage 其实已经实现了Reactpackage接口

其中createViewmanager方法中 已经帮我们 创建了很多常用控件的Manager

@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Arrays.<ViewManager>asList(
ARTRenderableViewManager.createARTGroupViewManager(),
ARTRenderableViewManager.createARTShapeViewManager(),
ARTRenderableViewManager.createARTTextViewManager(),
new ARTSurfaceViewManager(),
new ReactDialogPickerManager(),
new ReactDrawerLayoutManager(),
new ReactDropdownPickerManager(),
new ReactHorizontalScrollViewManager(),
new ReactImageManager(),
new ReactModalHostManager(reactContext),
new ReactProgressBarViewManager(),
new ReactRawTextManager(),
new ReactScrollViewManager(),
new ReactSliderManager(),
new ReactSwitchManager(),
new FrescoBasedReactTextInlineImageViewManager(),
new ReactTextInputManager(),
new ReactTextViewManager(),
new ReactToolbarManager(),
new ReactViewManager(),
new ReactViewPagerManager(),
new ReactVirtualTextViewManager(),
new ReactWebViewManager(),
new RecyclerViewBackedScrollViewManager(),
new SwipeRefreshLayoutManager());
}

为了注册方便 封装一下 reactPackage

abstract class BaseReactPackage implements ReactPackage {

    private ArrayList modules;

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        modules = new ArrayList<>();
        if (setViewManager(reactContext)!=null)
            modules.addAll(setViewManager(reactContext));
        return modules;
    }

    @Override
    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
            return Collections.emptyList();
    }

    /**
     * 添加新的ViewManager
     * @param reactContext
     * @return
     */
    protected abstract List<NativeModule> setViewManager(ReactApplicationContext reactContext) ;
}


使用方法

public class AddReactPackage extends BaseReactPackage {
    @Override
    protected List<NativeModule> setViewManager(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new ToastUtils(reactContext));
        modules.add(new NetMoudle(reactContext));
        return modules;
    }
}



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP