• react-native 调用原生Activity页面


    1. index.android.js

    import React, {Component} from 'react';
    import {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      NativeModules,
    } from 'react-native';
     
    class www extends Component {
      render() {
        return (
          <View style={styles.container}>
            <Text style={styles.instructions} onPress={() => this.onClick()}>
              点我
            </Text>
          </View>
        );
      }
     
      /**
       * 调用原生页面
       * ControlPCActivity是你想跳转到的页面
       */
      onClick() {
        NativeModules.MyMapIntentModule.startActivityByClassname('com.www.ControlPCActivity')  
      }
    }
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
      instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
      },
    });
     
    AppRegistry.registerComponent('www', () => www);
    

      

    2. MyMapIntentModule.java

    package com.www;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.text.TextUtils;
     
    import android.content.Context;
    import android.widget.Toast;
     
    import com.facebook.react.bridge.ReactApplicationContext;
    import com.facebook.react.bridge.ReactContextBaseJavaModule;
    import com.facebook.react.bridge.ReactMethod;
    
    import com.facebook.react.bridge.Callback;
    import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
    
    public class MyMapIntentModule extends ReactContextBaseJavaModule {
     
      public static final String REACTCLASSNAME = "MyMapIntentModule";
      private Context mContext;
     
      public MyMapIntentModule(ReactApplicationContext reactContext) {
        super(reactContext);
        mContext = reactContext;
      }
     
      @Override
      public String getName() {
        return REACTCLASSNAME;
      }
     /**
         * js页面跳转到activity 并传数据
         * @param name
         */
        @ReactMethod
        public void startActivityByClassname(String name){
            try{
                Activity currentActivity = getCurrentActivity();
                if(null!=currentActivity){
                    Class aimActivity = Class.forName(name);
                    Intent intent = new Intent(currentActivity,aimActivity);
                    currentActivity.startActivity(intent);
                }
            }catch(Exception e){
    
                throw new JSApplicationIllegalArgumentException(
                        "无法打开activity页面: "+e.getMessage());
            }
        }
    }
    

      

     

    3. MyReactPackage.java

    package com.www;
     
    import com.facebook.react.ReactPackage;
    import com.facebook.react.bridge.JavaScriptModule;
    import com.facebook.react.bridge.NativeModule;
    import com.facebook.react.bridge.ReactApplicationContext;
    import com.facebook.react.uimanager.ViewManager;
     
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
     
    
     
    public class MyReactPackage implements ReactPackage {
     
      @Override
      public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new MyMapIntentModule(reactContext));
        return modules;
      }
     
      @Override
      public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
      }
     
      @Override
      public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
      }
    }
    

      

     

    4. MainApplication.java

    package com.www;
    
    import android.app.Application;
    import android.util.Log;
    
    import com.facebook.react.ReactApplication;
    import com.facebook.react.ReactInstanceManager;
    import com.facebook.react.ReactNativeHost;
    import com.facebook.react.ReactPackage;
    import com.facebook.react.shell.MainReactPackage;
    import com.facebook.soloader.SoLoader;
    
    import java.util.Arrays;
    import java.util.List;
    
    public class MainApplication extends Application implements ReactApplication {
    
      private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        protected boolean getUseDeveloperSupport() {
          return BuildConfig.DEBUG;
        }
    
        @Override
        protected List<ReactPackage> getPackages() {
          return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
              new MyReactPackage() //只需添加这里
          );
        }
      };
    
      @Override
      public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
      }
    
      @Override
      public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
      }
    }
    

      

     

  • 相关阅读:
    理解二进制操作
    web前端代码重构
    Tomcat是一个Servlet容器?
    对于python命令行参数使用,你应该这么做才专业
    利用深度学习识别滑动验证码缺口位置
    机器学习笔记(十)---- KNN(K Nearst Neighbor)
    基于NB-IoT的智慧路灯监控系统(项目简介)
    【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)
    高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要【华为云技术分享】
    华为云数据库亮相下一代数据技术发展论坛,助力“数字一带一路”
  • 原文地址:https://www.cnblogs.com/shen076/p/6380034.html
Copyright © 2020-2023  润新知