Saltar al contenido principal
Versión: 0.82

Integración con un Fragmento de Android

Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

La guía de Integración con Apps Existentes detalla cómo integrar una aplicación React Native a pantalla completa en una aplicación Android existente como una Activity.

Usar componentes de React Native dentro de Fragmentos en una app existente requiere configuración adicional.

1. Agrega React Native a tu aplicación​

Sigue la guía de Integración con Apps Existentes hasta el final para asegurarte de que puedes ejecutar tu aplicación React Native de forma segura en una Activity a pantalla completa.

2. Agrega un FrameLayout para el Fragmento de React Native​

En este ejemplo, usaremos un FrameLayout para añadir un Fragmento de React Native a una Activity. Este enfoque es lo suficientemente flexible y puede adaptarse para usar React Native en otros diseños como Bottom Sheets o Tab Layouts.

Primero agrega un <FrameLayout> con un id, ancho y alto al diseño de tu Activity (ej. main_activity.xml en la carpeta res/layouts). Este será el contenedor donde renderizarás tu Fragmento de React Native.

xml
<FrameLayout
android:id="@+id/react_native_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

3. Haz que tu Activity anfitrión implemente DefaultHardwareBackBtnHandler​

Como tu activity anfitrión no es una ReactActivity, debes implementar la interfaz DefaultHardwareBackBtnHandler para manejar eventos del botón atrás. Esto es requerido por React Native para gestionar dichos eventos.

Ve a tu activity anfitrión y asegúrate de que implemente la interfaz DefaultHardwareBackBtnHandler:

Obsoleto

Activity.onBackPressed() ha sido marcado como obsoleto desde el nivel de API 33. En dispositivos con Android 16 y apps que apuntan al nivel de API 36, dejará de llamarse y debería usarse OnBackPressedDispatcher en su lugar.

diff
package <your-package-here>;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
+import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;

-class MainActivity extends AppCompatActivity {
+class MainActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);

findViewById(R.id.button_appcompose).setOnClickListener(button -> {
// Handle button click
});
}

+ @Override
+ public void invokeDefaultOnBackPressed() {
+ getOnBackPressedDispatcher().onBackPressed();
+ }
}

4. Añade un Fragmento de React Native al FrameLayout​

Finalmente, podemos actualizar la Activity para añadir un Fragmento de React Native al FrameLayout. En este ejemplo específico, asumiremos que tu Activity tiene un botón con id sample_button que al presionarse renderizará el Fragmento.

Actualiza el método onCreate de tu Activity de la siguiente manera:

diff
package <your-package-here>;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
+import com.facebook.react.ReactFragment;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;

public class MainActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);

findViewById(R.id.button_appcompose).setOnClickListener(button -> {
+ Bundle launchOptions = new Bundle();
+ launchOptions.putString("message", "my value");
+
+ ReactFragment fragment = new ReactFragment.Builder()
+ .setComponentName("HelloWorld")
+ .setLaunchOptions(launchOptions)
+ .build();
+ getSupportFragmentManager()
+ .beginTransaction()
+ .add(R.id.react_native_fragment, fragment)
+ .commit();
});
}

@Override
public void invokeDefaultOnBackPressed() {
super.onBackPressed();
}
}

Analicemos el código anterior.

El ReactFragment.Builder() se usa para crear un nuevo ReactFragment, y luego empleamos el supportFragmentManager para añadir ese Fragmento al FrameLayout.

Dentro del builder puedes personalizar cómo se crea el fragmento:

  • setComponentName es el nombre del componente que deseas renderizar. Corresponde al string especificado en tu index.js dentro del método registerComponent.

  • setLaunchOptions es un método opcional para pasar props iniciales a tu componente. Puedes eliminarlo si no lo usas.

5. Prueba tu integración​

Ejecuta yarn start para iniciar el bundler, luego ejecuta tu app Android en Android Studio. La app debería cargar el código JavaScript/TypeScript desde el servidor de desarrollo y mostrarlo en tu Fragmento de React Native dentro de la Activity.

Tu aplicación debería verse así:

Captura