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 JavaTipos de datos soportados por Bundle - Android y Java
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

Resetear GOOJPRT PT-210 MTP-II (Impresora térmica)

El día de hoy vamos a ver cómo restablecer la impresora térmica GOOJPRT PT-210 a…

2 semanas hace

Proxy Android para impresora térmica ESC POS

Hoy voy a enseñarte cómo imprimir en una impresora térmica conectada por USB a una…

2 semanas hace

Android – Servidor web con servicio en segundo plano

En este post voy a enseñarte a programar un servidor web en Android asegurándonos de…

2 semanas hace

Cancelar trabajo de impresión con C++

En este post te quiero compartir un código de C++ para listar y cancelar trabajos…

2 meses hace

Copiar bytes de Golang a JavaScript con WebAssembly

Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…

2 meses hace

Imprimir PDF con Ghostscript en Windows de manera programada

Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…

2 meses hace