私はAndroidを使用してリアクションネイティブのカスタムコンポーネントを実装しています。 Reactネイティブから実行可能な関数を実装したいと思います。私は@ReactMethod注釈があることを見出したが、それは私が拡張するクラスでそれを使用する場合にのみリアクトによって考慮される:ネイティブエクスプレッションメソッドに反応する
は、しかし、私のニーズが異なっている
ReactContextBaseJavaModule。私は自分のコンポーネントで関数を実行する必要があります。私は拡張私のクラスで@ReactNativeアノテーションで機能を公開しようとしていた。
ViewGroupManager
が、全く反応のために、この機能は表示されません。 ReactContextBaseJavaModuleオブジェクトからViewGroupManagerオブジェクトにアクセスする可能性はありますか?ネイティブコンポーネントからReactNativeに関数を公開する最も便利な方法は何ですか?私は反応するから両方showToastとconnectToRoomの機能を実行することが可能だ
public class VidyoModule extends ReactContextBaseJavaModule { public VidyoModule(ReactApplicationContext reactContext) { super(reactContext); } @Override public String getName() { return "RNTVideoManager"; } @ReactMethod public void showToast(){ Toast.makeText(getCurrentActivity(), "Test", Toast.LENGTH_SHORT).show(); } @ReactMethod public void connectToRoom(){ } }
:
は、ここに私のReactContextBaseJavaModule実装です。ここで
はViewGroupManagerの実装です:
public class VidyoComponentManager extends ViewGroupManager<VidyoView> { private static final String COMPONENT_NAME = "RNTVideo"; public VidyoComponentManager(){ } @Override public String getName() { return COMPONENT_NAME; } @Override protected VidyoView createViewInstance(ThemedReactContext reactContext) { return new VidyoView(reactContext); } @ReactMethod public void connectToRoom(){ } }
私ReactPackageは、次のようになります。
public class VidyoPackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); VidyoModule module = new VidyoModule(reactContext); modules.add(module); return modules; } @Override public List<Class<? extends JavaScriptModule>> createJSModules() { return Collections.emptyList(); } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.<ViewManager>singletonList( new VidyoComponentManager() ); } }
この場合には、機能connectToRoomはReactNativeため表示されません。私はここで何をすべきですか?私はコマンドを使うべきですか?
public Map<String, Integer> getCommandsMap() { return MapBuilder.<String, Integer>builder() .put("connectToRoom", 1) .build(); }