【RN桥接Android原生】第一节

创建高德地图实体类

1、在view文件夹中示例:

/**
 * 地图实体类
 * 继承于高德地图 MapView
 */
public class RNAMapView extends MapView {
    
    
    MapView mMapView = null;

    public RNAMapView(Context context) {
    
    
        super(context);
        super.onCreate(null);
    }
}

创建桥接类

1、创建 Manager文件夹
创建桥接类 RNAMapViewManager 继承于 React包中的ViewGroupManager

/*
* 桥接类
*/
public class RNAMapViewManager extends ViewGroupManager<RNAMapView> {
    
    
    private ReactApplicationContext reactApplicationContext;
    public RNAMapViewManager(ReactApplicationContext reactContext) {
    
    
        this.reactApplicationContext = reactContext;
    }

    @NonNull
    @Override
    public String getName() {
    
    
        return "AMapView";
    }

    /**
     * 重写 createViewInstance 方法,返回自定义的原生组件
     * @param reactContext
     * @return
     */
    @NonNull
    @Override
    protected RNAMapView createViewInstance(@NonNull ThemedReactContext reactContext) {
    
    
        return new RNAMapView(reactContext);
    }
}

3、注册包

public class RNAMapPackage implements ReactPackage {
    
    
    @NonNull
    @Override
    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
    
    
        List<NativeModule> modules = new ArrayList<>();
        // 这里	modules.add(new NaviActivity(reactContext));意义就是添加一个安卓原生的activity模块
        // 这个模块可以定义方案,RN可以直接调用(方法上必须声明了@ReactMethod才可以)
        return modules;
    }

    @NonNull
    @Override
    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
    
    
        List<ViewManager> managers = new ArrayList<>();
        managers.add(new RNAMapViewManager(reactContext));
        return managers;
    }
}

4、加入注册的包
1、在安卓程序的app内的MainApplication内

@Override
protected List<ReactPackage> getPackages() {
    
    
  	//..... 省略
	packages.add(new RNAMapPackage());
}

RN使用

import React from "react";

import ReactNative, {
    
     requireNativeComponent, UIManager } from 'react-native';

const AMapViewComponent = requireNativeComponent('AMapView');

export default class MapViewContainer extends React.Component {
    
    
    constructor(props){
    
    
        super(props);
    }

    render(){
    
    
        return (
            <AMapViewComponent 
                ref='id_mapview'
                {
    
    ...this.props}
            />
        )
    }
} 

猜你喜欢

转载自blog.csdn.net/dly15873944157/article/details/123164912
今日推荐