Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call methods from the Activity class (React Native Android)

Is there an api to call methods from the Activity class? I need to call finish() on my app but couldn't find anything relevant in the docs.

To be more specific, I want to finish() the MainActivity from my index.android.jsx, when a particular TouchableHighlight is pressed.

[update]

For now I'm exposing a finish() method from my NativeModule but maybe there's a better way to do that.

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

like image 516
felipebueno Avatar asked Oct 26 '15 18:10

felipebueno


1 Answers

I don't see a built in way to do this either and your approach using NativeModule is what I use as well.

However, if you call setCurrentActivity when building your ReactInstanceManager then you can call getCurrentActivity from your module instead of passing it through the ReactPackage and ReactModule constructors.

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

}

MyReactPackage.java

public class MyReactPackage implements 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;
    }

}

ReactInstanceManager Setup

mReactInstanceManager = ReactInstanceManager.builder()
        .addPackage(new MyReactPackage())
        .setCurrentActivity(this)
        // other settings
        .build();
like image 128
mpkuth Avatar answered Sep 20 '22 02:09

mpkuth