API de resultados de actividad: The Clean Way | de Prateek Batra | septiembre 2022
Foto de Lewis Kang’ethe Ngugi en Unsplash
IniciarActividadParaResultado es el componente central/OG del ecosistema de actividad de Android, que solíamos usar para iniciar una actividad y obtener resultados, ya que está obsoleto. Encontramos una nueva y mejor manera Registrar actividad por resultado.
Contenidos
Por qué era IniciarActividadParaResultado ¿anticuado?
StartActivityForResult es el componente más básico del ecosistema de Android, pero con su ventaja de fácil uso, tenía muchas desventajas como
- Difícil encontrar de dónde proviene una solicitud específica
- Tuvo que enviar un código de solicitud único en caso de que se use un duplicado. esto a veces puede conducir a resultados erróneos
- El resultado se pierde cuando se vuelve a crear el componente.
- La devolución de llamada onActivityResult no funciona bien con fragmentos
¿Por qué la nueva puntuación de actividad es mejor?
- Sencillo, ligero y limpio.
- Soporte integrado y personalizado basado en contratos
- Devolución de llamada separada para cada actividad (solíamos tener un puntaje de actividad común para cada actividad)
Cómo usar la API de resultados de actividad
Paso 1: Declarar el launcherlatinit var launcher: ActivityResultLauncherPaso 2: Registrar itlauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { resultado ->useTheResult(resultado)}Nota: tienes que llamar registrarse para el resultado de la actividad () antes de que se cree el fragmento o la actividad; no puedes iniciarlos Lanzador de resultados de actividad hasta que el fragmento o actividad sea ciclo vital ha alcanzado CREADO.Paso 3: Use el lanzadorlaunch(Intent(context, ResultActivity::class.java).putExtra(ResultActivity.PARAM_DATA,id))
De esta manera, ahora podemos refactorizar fácil y eficientemente cualquier startActivityForResult() antiguo.
Algunos de los ActivityResultContracts integrados son:
- IniciarActividadParaResultado
- Solicitar permiso
- Tomar una foto
- Grabar video
- Abrir documento
Se puede encontrar más aquí: https://developer.android.com/reference/androidx/activity/result/contract/package-summary
Además de estos contratos de tipo de resultado incorporados, también hay soporte para contratos personalizados, p.
¿Algunos pensamientos adicionales?
El contrato personalizado nos permite separar toda la lógica de la clase de contrato. Si bien esta es una forma mucho mejor en comparación con lo que solíamos tener, esto se combina con nuestra actividad. Para desvincularlo un poco, podemos aprovechar la personalización con Live Data y Lifecycle Observer.
sigue leyendo
⨭ Obtener el resultado de una actividad | Documentación oficial ⨭ Presentamos las API de resultados de actividad | adam bennettVisítame en Twitter: https://twitter.com/its_pra_tick