Skip to content

ReactActivity

罗坤 edited this page Mar 6, 2020 · 2 revisions

简介

React Native应用程序的基础活动。 自定义活动 activity 继承ReactActivity可以在new Intent(activity, ExampleActivity.class)之后仍能监听到 MainActivity的所有全局事件(如alert,Modal)。(原因详见ReactContext-LifecycleEventListener)

@ReactMethod

  @ReactMethod
  void navigateToExample() {
    Activity activity = getCurrentActivity();
    if (activity != null) {
      Intent intent = new Intent(activity, ExampleActivity.class);
      activity.startActivity(intent);
    }
  }

ExampleActivity.class

public class ExampleActivity extends ReactActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

String getMainComponentName

返回从JavaScript注册的主要组件的名称。常用于安排组件的渲染。比如“MoviesApp”

  • 例如: 在入口文件index.js使用AppRegistry注册2个根组件App1App2
import { AppRegistry } from 'react-native'

class App1 extends React.Component {
  render(){
    return (
      <View>
      </View>
    )
  }
}

class App2 extends React.Component {
  render(){
    return (
      <View>
      </View>
    )
  }
}

AppRegistry.registerComponent("App1", () => App);
AppRegistry.registerComponent("App2", () => App2);

MainActivity.java

public class MainActivity extends ReactActivity {
    @Override
    protected String getMainComponentName() {
        return "App1";
    }
}

SecondActivity.java

public class ExampleActivity extends ReactActivity {
    @Override
    protected String getMainComponentName() {
        return "App2";
    }
}

当显式Intent打开SecondActivity.java时,将会渲染App2组件。使用Intent跳转时别忘了在AndroidManifest.xml在注册<activity android:name=".ExampleActivity" />

createReactActivityDelegate

return new ReactActivityDelegate(){} 在构造时调用,如果您有自定义的委托实现,则覆盖。(例如:react-native-gesture-handler 重写ReactActivityDelegate.ReactRootView修改内置触摸系统)

protected ReactActivityDelegate createReactActivityDelegate() {
  return new ReactActivityDelegate(this, getMainComponentName()) {
    @Override
    protected ReactRootView createRootView() {
      ...
    }

    @Override
    //覆盖重写ReactActivityDelegate类内部方法
  }
}

void invokeDefaultOnBackPressed

该方法实现(implements)自:

public interface DefaultHardwareBackBtnHandler {
  void invokeDefaultOnBackPressed();
}

DeviceEventManagerModule用于委派硬件后退按钮事件的接口。 默认情况下,所有onBackPress()都不会被执行默认的后退处理(backpress handler), 而是将其传播到JS实例。如果JS不想处理backpress,它应该回调到native以调用该函数以执行默认事件。

  • 例如:
@Override
public void onBackPressed() {
  invokeDefaultOnBackPressed();
}