Desarrollo de Fragmentos en Android
Desarrollo de Fragmentos en Android
Fragmentos Android
Fragmento
❖ Un fragmento es una parte de una actividad con ciclo de
vida propio.
❖ Recibe sus propios eventos.
❖ Se puede agregar o quitar mientras la actividad se está
ejecutando.
❖ Se puede decir que es una "subActividad".
❖ Permiten reusar código.
❖ Un fragmento no es una actividad.
Una actividad, tres fragmentos
FragmentoA
Actividad 4 vistas, 4
controladores
activos al
FragmentoB
mismo tiempo.
4 xml, 4 .kt
FragmentoC
Diferentes pantallas
❖ Los fragmentos permiten configurar la GUI dependiendo de la
pantalla en que corre la app.
Ciclo de vida del fragmento
❖ Normalmente sobrescribimos
los métodos del ciclo de vida:
➡ onCreate
➡ onCreateView
➡ onPause
Ejercicio
Configurando
❖ Borra los fragmentos y sus vistas, creados por el Wizard.
❖ Agrega el listener en Principal.
[Link] { item -> Boolean
when ([Link]) {
[Link].navigation_home ->
println("Home")
[Link].navigation_dashboard ->
println("Dashboard")
[Link].navigation_notifications ->
println("Notifications")
[Link].navigation_otro ->
println("Otro")
else ->
println("Desconocido")
}
true
}
Creando fragmentos
❖ Crea un fragmento para la
opción de Home.
❖ Observa que se crea un
archivo [Link] y otro
fragment_home.xml
❖ Crea la interfaz de usuario
para este fragmento.
Agregando fragmentos
La forma más sencilla de agregar
un fragmento es con un
componente <fragment>, pero
también es la menos flexible.
Borra el contenedor que agregó el
wizard y añade un Fragment de
prueba.
De esta manera puedes agregar
fragmentos 'estáticos', es decir se
comportan como cualquier otro
componente.
Agregando fragmentos de manera dinámica
fragHome = FragHome()
[Link]()
.replace([Link], fragHome)
.commit()
Opciones para agregar fragmentos
fragHome = FragHome()
[Link]()
.replace([Link], fragHome)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack([Link]())
.commit()
Ahora te toca a ti
Crea los otros fragmentos para completar la app. Muestra
el correspondiente cada vez que el usuario selecciona un
botón diferente en la barra de navegación.
Práctica
❖ Implementamos una app que
muestre un índice con una lista
de materias.
❖ Al oprimir una materia se
carga la información detallada.
❖ En el teléfono hay dos
actividades.
❖ En la tableta, hay una sola
mostrando la lista y los
detalles.
Diseño
MaestroActiv DetalleActiv
<fragment>
MateriaDetalleFrag
- indice
+ setIndice
Creando el proyecto
❖ Crea el proyecto
MateriasFragmentos.
❖ La actividad principal es
MaestroActiv. Empty Activity.
❖ SDK mínimo 19.
❖ Crea una segunda actividad
DetalleActiv. Empty Activity.
Navegación
❖ Agrega un botón de prueba en la actividad principal.
❖ Al hacer click al botón, inicia la segunda actividad por
medio de un Intent.
❖ Agrega un fragmento en
blanco al proyecto.
❖ Nombre: MateriaDetalleFrag.
❖ Pide que se cree el archivo
XML.
1. Cambia el Layout a
ConstraintLayout
2. Agrega/Modifica el TextView
(tvTitulo) como título que
contendrá el nombre de la
materia que se despliega.
3. Agrega un TextView (tvDetalle).
Ocupa todo el espacio inferior
disponible para desplegar la
información de la materia.
Agregando un fragmento
activity_detalle.xml
❖ Utiliza un componente fragment para agregar el fragmento al
layout de detalle.
Diseño
MaestroActiv DetalleActiv
Id
By
<fragment>
ent
gm
id: fragMateriaDetalle
ra
dF
fin
MateriaDetalleFrag
- indice
+ setIndice()
Comunicándonos con el Fragmento
❖ Crea la clase Materia que servirá para proporcionar los
datos que queremos desplegar.
❖ [Link]
FragmentManager
❖ Para comunicarse con el fragmento, la actividad
(DetalleActiv) requiere una referencia al fragmento. Ya
la tiene de manera automática, es el id que le asignamos
al contenedor <fragment>: fragMateriaDetalle
if (view != null) {
val materia = [Link][indice]
[Link] = [Link]
[Link] = [Link]
}
}
return vista
}
Diseño
MaestroActiv DetalleActiv
Id
By
<fragment>
ent
<fragment>
gm
ListaMateriasFrag fragMateriaDetalle
ra
dF
MateriaDetalleFrag
fin
- indice
+ setIndice
Agrega la lista a la actividad principal
❖ En activity_maestro.xml/activity_main.xml agregamos un
componente fragment de tipo ListaMateriasFrag.
click MateriaDetalleFrag
- indice
+ setIndice
Interfaces
❖ Declara una interface en el fragmento de la lista.
// Interface
companion object {
interface ListenerLista {
fun itemClicked(indice: Int)
}
}
// Variable de instancia en el fragmento
var listener: ListenerLista? = null
listener?.itemClicked(position)
}
¿Cuál es la
diferencia?
Respuesta
Implementando la interface
❖ Implementa la interface en la actividad principal y
sobrescribe el método itemClicked.
class MaestroActiv : AppCompatActivity(), [Link]
{
...