Curso Carrito de Compra en Kotlin
Navegación con TabLayout y ViewPager - Carrito de Compras en Kotlin
Implementar TabLayout y ViewPager en tu aplicación mejorará considerablemente la usabilidad y la experiencia del usuario, permitiendo un acceso rápido a diferentes secciones sin recargar la pantalla.
¡Hola, programadores! Bienvenidos a una nueva lección de nuestro curso de Carrito de Compras con Kotlin. En el video de hoy, vamos a implementar la navegación con TabLayout y ViewPager, una herramienta súper útil para organizar el contenido en pestañas y ofrecer una experiencia de usuario fluida y moderna.
Aquí tienes una descripción detallada del código de la clase CatalogoActivity
, fragmentada con explicaciones acompañadas de trozos de código relevantes:
Se declaran las variables tab
y page
que corresponden al TabLayout y al ViewPager. Estas gestionan las pestañas y el contenido de cada fragmento que se muestra al deslizar entre ellas.
kotlin
class CatalogoActivity : AppCompatActivity() {
lateinit var tab: TabLayout
lateinit var page: ViewPager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_catalogo)
TabLayout
y ViewPager
Se vinculan los componentes del layout XML con el código mediante findViewById
. Aquí se añaden tres pestañas al TabLayout
con textos "OFICINA", "LIBRERÍA" y "REGALOS".
kotlin
tab = findViewById(R.id.tab)
page = findViewById(R.id.page)
tab.addTab(tab.newTab().setText("OFICINA"))
tab.addTab(tab.newTab().setText("LIBRERÍA"))
tab.addTab(tab.newTab().setText("REGALOS"))
También se define la gravedad de las pestañas para que ocupen todo el espacio disponible:
kotlin
tab.tabGravity = TabLayout.GRAVITY_FILL
ViewPager
Aquí se crea el adaptador MyAdapter
(una clase interna que veremos más adelante), que es responsable de gestionar qué fragmento se debe mostrar para cada pestaña. El ViewPager
recibe este adaptador.
kotlin
val adapter = MyAdapter(this, supportFragmentManager, tab.tabCount)
page.adapter = adapter
TabLayout
y ViewPager
Se añade un PageChangeListener que sincroniza el cambio de páginas en el ViewPager
con las pestañas del TabLayout
. Cuando el usuario desliza entre las páginas, las pestañas se actualizan automáticamente.
kotlin
page.addOnPageChangeListener(TabLayoutOnPageChangeListener(tab))
Además, se gestiona el comportamiento cuando una pestaña es seleccionada. Esto asegura que, cuando se toca una pestaña, el ViewPager
cambie a la página correspondiente:
kotlin
tab.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(ttab: TabLayout.Tab?) {
page.currentItem = ttab!!.position
}
override fun onTabUnselected(ttab: TabLayout.Tab?) {}
override fun onTabReselected(ttab: TabLayout.Tab?) {}
})
Se infla un menú en la barra de acciones mediante onCreateOptionsMenu
. En este caso, contiene una opción para acceder al carrito de compras.
kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_cart -> {
startActivity(Intent(baseContext, CartActivity::class.java))
true
}
else -> super.onOptionsItemSelected(item)
}
}
En onOptionsItemSelected
, se maneja el evento cuando el usuario selecciona la opción de "Carrito", redirigiéndolo a la actividad CartActivity
.
kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_cart -> {
startActivity(Intent(baseContext, CartActivity::class.java))
true
}
else -> super.onOptionsItemSelected(item)
}
}
MyAdapter
MyAdapter
es un adaptador personalizado que extiende FragmentPagerAdapter
. Aquí se gestionan los fragmentos que se deben mostrar según la pestaña seleccionada.
kotlin
class MyAdapter(var context: Context, fm: FragmentManager, var numTabs: Int) : FragmentPagerAdapter(fm) {
override fun getCount(): Int {
return numTabs
}
override fun getItem(position: Int): Fragment {
return when (position) {
0 -> OficinaFragment()
1 -> LibreriaFragment()
2 -> RegalosFragment()
else -> getItem(position)
}
}
}
getCount
: Retorna el número total de pestañas que tiene el TabLayout
.getItem
: Devuelve el fragmento correspondiente a la pestaña seleccionada. Dependiendo de la posición, se retorna OficinaFragment
, LibreriaFragment
, o RegalosFragment
.49 visitas
« Capítulo 9 – Preferencias- Cargar datos a un DB SQLite
Capítulo 11 – Mostrar Productos »
© Copyright Codea App | LATAM | 2020 - 2024