【问题标题】:Call methods from the Activity class (React Native Android)从 Activity 类调用方法(React Native Android)
【发布时间】:2015-10-26 18:00:23
【问题描述】:

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

更具体地说,当按下特定的 TouchableHighlight 时,我想从我的 index.android.jsx 中 finish() MainActivity

[更新]

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

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

【问题讨论】:

  • 你可以在activity类中调用finish()来销毁activity。你问的是这个吗?
  • 不,我想从我的 index.android.jsx 上的 React Native 组件调用它
  • 你有没有为这个@buenoFelipe找到任何解决方案我有同样的问题
  • 仅供参考,如果您要做的只是finish() React Native Activity,那么您可以从react-native 导入BackAndroid,然后使用BackAndroid.exitApp()

标签: android react-native react-jsx


【解决方案1】:

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

但是,如果您在构建ReactInstanceManager 时调用setCurrentActivity,那么您可以从您的模块中调用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();
        }
    }

}

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

}

ReactInstanceManager 设置

mReactInstanceManager = ReactInstanceManager.builder()
        .addPackage(new MyReactPackage())
        .setCurrentActivity(this)
        // other settings
        .build();

【讨论】:

  • 嘿,谢谢你,@mpkuth。不幸的是(幸运的是?),我不再使用 React Native,但我相信你的回答对其他人有用。
  • 我不得不为完成方法使用不同的名称
  • 你好@mpkuth,你能帮我找到一个想法,我该怎么做相反的事情,我的意思是,我想从 Native java 代码中打开一个 react native 组件
猜你喜欢
  • 2018-11-07
  • 2012-04-28
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
相关资源
最近更新 更多