• 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);
      }
    }
    

      

     

  • 相关阅读:
    前端基础之BOM和DOM
    前端基础之JavaScript
    前端基础之CSS
    Black And White HDU
    Robot Motion HDU
    A Knight's Journey POJ
    Find a way HDU
    排序 HDU
    Dungeon Master POJ
    Network Saboteur POJ
  • 原文地址:https://www.cnblogs.com/shen076/p/6380034.html
Copyright © 2020-2023  润新知