Интеграция с фрагментами Android¶
В руководстве Интеграция с существующими приложениями подробно описано, как интегрировать полноэкранное приложение React Native в существующее приложение Android в качестве Activity. Для использования компонентов React Native в рамках Fragments в существующем приложении требуется дополнительная настройка. Преимущество этого способа заключается в том, что он позволяет интегрировать компоненты React Native в нативное приложение вместе с нативными фрагментами в Activity.
1. Добавьте React Native в ваше приложение¶
Следуйте руководству по Интеграции с существующими приложениями до раздела интеграции кода. Продолжайте следовать Шагу 1. Создайте файл index.android.js
и Шаг 2. Добавьте ваш код React Native из этого раздела.
2. Интеграция вашего приложения с фрагментом React Native¶
Вы можете отобразить ваш React Native компонент во фрагмент вместо полноэкранного React Native Activity. Компонент может называться "экран" или "фрагмент", и он будет функционировать так же, как и фрагмент Android, вероятно, содержащий дочерние компоненты. Эти компоненты могут быть помещены в папку /fragments
, а дочерние компоненты, используемые для создания фрагмента, могут быть помещены в папку /components
.
Вам нужно будет реализовать интерфейс ReactApplication
в вашем основном классе Application Java/Kotlin. Если вы создали новый проект в Android Studio с активностью по умолчанию, вам нужно будет создать новый класс (например, MyReactApplication.java
или MyReactApplication.kt
). Если класс уже существует, вы можете найти этот основной класс в вашем файле AndroidManifest.xml
. В теге <application />
вы должны увидеть свойство android:name
, например, android:name=".MyReactApplication"
. Это значение является классом, который вы хотите реализовать и предоставить необходимые методы.
Убедитесь, что ваш основной класс Application реализует ReactApplication:
1 |
|
1 |
|
Переопределите необходимые методы getUseDeveloperSupport
, getPackages
и getReactNativeHost
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Если вы используете Android Studio, используйте Alt+Enter, чтобы добавить все недостающие импорты в ваш класс. В качестве альтернативы вот необходимые импорты, которые нужно включить вручную:
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 |
|
Выполните операцию "Синхронизировать файлы проекта с Gradle".
Шаг 3. Добавьте фрейм-макет для фрагмента React Native¶
Теперь вы добавите ваш React Native фрагмент в Activity. Для нового проекта этой активностью будет MainActivity
, но это может быть любая активность, и больше фрагментов могут быть добавлены в дополнительные активности по мере интеграции новых компонентов React Native в ваше приложение.
Сначала добавьте фрагмент React Native в макет вашей активности. Например, main_activity.xml
в папке res/layouts
.
Добавьте <FrameLayout>
с id, шириной и высотой. Это макет, в котором вы найдете и отобразите ваш фрагмент React Native.
1 2 3 4 5 |
|
Шаг 4. Добавление фрагмента React Native в макет FrameLayout¶
Чтобы добавить ваш React Native фрагмент в макет, вам нужно иметь Activity. Как уже говорилось, в новом проекте это будет MainActivity
. В этой активности добавьте кнопку и слушатель событий. При нажатии на кнопку будет отображаться ваш React Native Fragment.
Измените макет вашей Activity, чтобы добавить кнопку:
1 2 3 4 5 6 7 |
|
Теперь в классе Activity (например, MainActivity.java
или MainActivity.kt
) вам нужно добавить OnClickListener
для кнопки, инстанцировать ваш ReactFragment
и добавить его в макет фрейма.
Добавьте поле кнопки в верхнюю часть вашей Activity:
1 |
|
1 |
|
Обновите метод onCreate
вашей активности следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
В приведенном выше коде Fragment reactNativeFragment = new ReactFragment.Builder()
создает ReactFragment, а getSupportFragmentManager().beginTransaction().add()
добавляет фрагмент к макету фрейма.
Если вы используете стартовый набор для React Native, замените строку "HelloWorld" на ту, что находится в вашем файле index.js
или index.android.js
(это первый аргумент метода AppRegistry.registerComponent()
).
Добавьте метод getLaunchOptions
, который позволит вам передавать пропсы компоненту. Это необязательно, и вы можете удалить setLaunchOptions
, если вам не нужно передавать пропсы.
1 2 3 4 5 |
|
1 2 3 |
|
Добавьте все недостающие импорты в ваш класс Activity. Будьте внимательны, используйте BuildConfig вашего пакета, а не тот, который был взят из пакета facebook! В качестве альтернативы, вот необходимые импорты, которые нужно включить вручную:
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
Выполните операцию "Синхронизировать файлы проекта с Gradle".
Шаг 5. Протестируйте вашу интеграцию¶
Запустите yarn
для установки зависимостей react-native и yarn native
для запуска metro bundler. Запустите ваше android-приложение в Android Studio, и оно должно загрузить JavaScript-код с сервера разработки и отобразить его в вашем React Native-фрагменте в Activity.
Шаг 6. Дополнительная настройка — нативные модули¶
Вам может понадобиться обратиться к существующему коду Java/Kotlin из вашего компонента react. Нативные модули позволяют вам обращаться к нативному коду и запускать методы в вашем нативном приложении. Следуйте настройке здесь native-modules-android