尋ねAndroidのアクティビティを開始するには、カスタムネイティブモジュールを作成する必要があります。 1つはActivityStarter
と呼ばれます。次のようにそれは、JavaScriptから使用されることがあります。
import { ..., NativeModules, ... } from 'react-native';
export default class DemoComponent extends Component {
render() {
return (
<View>
<Button
onPress={() => NativeModules.ActivityStarter.navigateToExample()}
title='Start example activity'
/>
</View>
);
}
}
ActivityStarter
はNativeModule
呼ばリアクトネイティブのJavaインタフェースを実装するだけでJavaクラスです。このインタフェースの力仕事はまだ1が通常どちらか拡張1またはこと、BaseJavaModule
によって行われます。
class ActivityStarterModule extends ReactContextBaseJavaModule {
ActivityStarterModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "ActivityStarter";
}
@ReactMethod
void navigateToExample() {
ReactApplicationContext context = getReactApplicationContext();
Intent intent = new Intent(context, ExampleActivity.class);
context.startActivity(intent);
}
}
このクラスの名前は重要ではありません。 JavaScriptに公開されるActivityStarter
のモジュール名は、getName()
メソッドから取得されます。
react-native init
によって生成されるデフォルトのアプリケーションには、React Nativeを初期化するMainApplication
クラスが含まれています。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "HelloWorld", null);
setContentView(mReactRootView);
}
を:あなたは、既存のアプリケーションにネイティブリアクト追加する場合は、次のように、this pageがonCreate
あなたはActivity
年代をオーバーライドしてい
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage()
);
}
:他のものの中には、そのgetPackages
メソッドをオーバーライドするReactNativeHost
を拡張します注。どのアプローチを使用するかにかかわらず、カスタムモジュールを公開するカスタムパッケージを追加する必要があります。それは次のようになります。
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new ActivityStarterReactPackage(), // This is it!
new MainReactPackage()
);
}
それともReactInstanceManager.builder()
にaddPackage(new ActivityStartecReactPackage())
を行うことができます。
class ActivityStarterReactPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new ActivityStarterModule(reactContext));
return modules;
}
// UPDATE: This method was deprecated in 0.47
// @Override
// public List<Class<? extends JavaScriptModule>> createJSModules() {
// return Collections.emptyList();
// }
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
}
は最後に、私たちの新しいパッケージが含まれるようにMainApplication
を更新します。
完全なself-contained example hereが見つかります。
UPDATE
createJSModules
バージョン0.47でReactPackage
界面から除去し、そして試料のコメントアウトされています。なんらかの理由で古いバージョンのRNが付いている場合は、それでも必要になります。