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:

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:

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.