Android

Android y Java – Pasar datos de un fragmento a otro

Ya hemos visto anteriormente cómo hacer la transición de un fragmento a otro en Android usando Java, de manera programada.

Ahora veremos cómo ir de un fragmento a otro pero pasando datos, es decir, compartir datos de un fragmento origen a un fragmento de destino.

Te recomiendo encarecidamente que visites el post anterior para que aprendas lo básico, no te llevará mucho tiempo.

Pasar datos de un Fragmento a otro en Android

Para pasar datos de un fragmento a otro simplemente creamos un Bundle y llamamos al método setArguments del fragmento.

Por cierto, para importar el Bundle escribe al inicio import android.os.Bundle.

En el fragmento al que le pasamos los datos llamamos a getArguments y listo, recuperamos el Bundle.

La parte importante es en donde le ponemos los datos al Bundle usando los métodos putXXXX en donde XXXX es un tipo de dato. La sintaxis es:

bundle.putXXXX(clave, valor);

Los métodos que soporta son:

Tipos de datos soportados por Bundle – Android y Java

Te digo como recomendación que si quieres pasar un dato que puedes recuperar de una base de datos, pases únicamente el id y dentro del fragmento obtengas el objeto completo traído de la base de datos.

Paso 1: establecer datos en fragmento de origen

Ahora sí veamos cómo hacer la transición y pasar datos. En el fragmento de origen se necesita este código, el cual crea un bundle y establece los argumentos para llamar al otro fragmento:

//Crear bundle, que son los datos que pasaremos
Bundle datosAEnviar = new Bundle();
// Aquí pon todos los datos que quieras en formato clave, valor
datosAEnviar.putLong("id", 123L);
// Y puedes pasarle más datos..
datosAEnviar.putInt("edad", 21);
datosAEnviar.putString("nombre", "Parzibyte");
// Preparar el fragmento
Fragment fragmento = new GastosFragmentEditar();
// ¡Importante! darle argumentos
fragmento.setArguments(datosAEnviar);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_principal, fragmento);
fragmentTransaction.addToBackStack(null);

// Terminar transición y nos vemos en el fragmento de destino
fragmentTransaction.commit();

La única diferencia con el post en donde hacemos la transacción es que ahora usamos Bundle y le ponemos algunos datos. Eres libre de ponerle los datos que quieras, siempre y cuando no repitas claves.

Paso 2: recibir datos en fragmento de destino

En el fragmento en donde vamos a recibir los datos sobrescribimos al método onViewCreated (esto es cuando la vista ya se ha creado, lo recomiendo) y obtenemos el Bundle con getArguments.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    Bundle datosRecuperados = getArguments();
    if (datosRecuperados == null) {
        // No hay datos, manejar excepción
        return;
    }

    // Y ahora puedes recuperar usando get en lugar de put
    long id = datosRecuperados.getLong("id");
    int edad = datosRecuperados.getInt("edad");
    String nombre = datosRecuperados.getString("nombre");
    // Imprimimos, pero en tu caso haz lo necesario
    Log.d("GastosFragmentEditar", "El ID: " + id);
    Log.d("GastosFragmentEditar", "La edad: " + edad);
    Log.d("GastosFragmentEditar", "El nombre: " + nombre);
}

Ahora en lugar de llamar a putXXXX llamamos a getXXXX y eso nos devolverá los datos que pasamos en el fragmento.

Estamos imprimiendo en el monitor de Android usando Log, al llamarlo muchas veces la salida es esta:

Datos recuperados en el fragmento

En mi caso estoy pasando un id distinto a partir de una lista, pero con eso queda demostrado que todo esto funciona.

Conclusión

Vimos cómo usando la clase Bundle y Fragment con los métodos getArguments, setArguments y getXXXX con putXXXX sirven para pasar datos entre fragmentos de una manera fácil.

Es importante comprobar que los datos pasados de un fragmento a otro no sean nulos, porque si no lo hacemos estamos propensos a obtener un error de tipo NullPointerException.

Te invito a ver más sobre Android o Java en general.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Tramitar acta de nacimiento en línea de manera instantánea

En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…

27 min hace

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esta web usa cookies.