从 Activity 类调用方法(React Native Android)

fel*_*eno 5 android react-jsx react-native

是否有 api 可以从Activity类中调用方法?我需要调用finish()我的应用程序,但在文档中找不到任何相关内容。

更具体地讲,我想finish()MainActivity从我的index.android.jsx,当特定TouchableHighlight被按下。

[更新]

现在我finish()从我的 NativeModule公开一个方法,但也许有更好的方法来做到这一点。

https://github.com/sneerteam/react-native-sneer/blob/master/src/main/java/me/sneer/react/SneerModule.java#L84

mpk*_*uth 2

我也没有看到内置的方法来执行此操作,并且您使用的方法NativeModule也是我使用的方法。

但是,如果您setCurrentActivity在构建时调用ReactInstanceManager,那么您可以getCurrentActivity从模块中调用,而不是通过ReactPackageReactModule构造函数传递它。

MyReactModule.java

public class MyReactModule extends ReactContextBaseJavaModule {

    public MyReactModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return getClass().getSimpleName();
    }

    @ReactMethod
    public void finish() {
        Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.finish();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

MyReactPackage.java

公共类 MyReactPackage 实现 ReactPackage {

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

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

    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new MyReactModule(reactContext));
        return modules;
    }

}
Run Code Online (Sandbox Code Playgroud)

ReactInstanceManager 设置

mReactInstanceManager = ReactInstanceManager.builder()
        .addPackage(new MyReactPackage())
        .setCurrentActivity(this)
        // other settings
        .build();
Run Code Online (Sandbox Code Playgroud)