➜ ListItems
Listar Productos del Carrito de Compras por Categoría en Android con SQLite y Kotlin | Aprenderás a listar los productos añadidos al carrito de compras en una aplicación Android utilizando un ListView y un CursorAdapter para recuperar los datos desde una base de datos SQLite. Implementarás la funcionalidad para mostrar el nombre, precio, cantidad, y el importe total.
En esta lección, aprenderás a listar los productos añadidos al carrito de compras en una aplicación Android utilizando un ListView
y un CursorAdapter
para recuperar los datos desde una base de datos SQLite. Implementarás la funcionalidad para mostrar el nombre, precio, cantidad, y el importe total de cada producto, además de manejar eventos como aumentar o disminuir la cantidad del producto. También aprenderás a cargar imágenes desde una URL con Picasso
y a gestionar la actualización de los productos en la base de datos.
Tu implementación de la clase Cartctivity
tiene la estructura básica para mostrar los productos del carrito de compras utilizando un ListView
y un adaptador basado en CursorAdapter
. Aquí está el desglose de lo que estás haciendo y algunas recomendaciones para que funcione de manera más fluida.
Desglose del código:
-
Inicialización de componentes: En el método
onCreate()
, estás inicializando varios componentes importantes: elListView
(para mostrar los productos), elDBmanager
(para manejar las operaciones de la base de datos), y los botones de eliminar (btnDel
) y enviar (btnSend
).kotlin
lv = findViewById(R.id.lv) btnDel = findViewById(R.id.btnDeleteCart) btnSend = findViewById(R.id.btnSend)
-
Consulta de productos del carrito: Utilizas el método
getCart()
deDBmanager
para obtener todos los productos en el carrito. Luego, verificas si elCursor
contiene datos (cursor!!.moveToFirst()
) y creas el adaptador basado en esos datos.kotlin
val cursor = dBmanager.getCart() if (cursor!!.moveToFirst()) { adapter = cursorAdapter(baseContext, cursor, 0) lv.adapter = adapter }
-
Clase
cursorAdapter
: Esta clase extiendeCursorAdapter
y se encarga de mapear los datos del carrito a la vistacart_item
. Aquí se realiza la asignación de los valores de nombre, precio, cantidad, y la imagen del producto.kotlin
tvName?.text = cursor?.getString(cursor.getColumnIndexOrThrow("name")) tvPrice?.text = cursor?.getString(cursor.getColumnIndexOrThrow("price")) tvQuantity?.text = cursor?.getString(cursor.getColumnIndexOrThrow("quantity"))
Además, estás calculando el importe basado en la cantidad y el precio del producto.
kotlin
var importe = qty?.let { price?.times(it) } tvImporte?.text = importe.toString()
-
Carga de la imagen: Utilizas la librería
Picasso
para cargar la imagen del producto.kotlin
Picasso.get().load(_URLIMG + image).into(ImImage)
Código completo kotlin
class Cartctivity : AppCompatActivity() {
companion object{
lateinit var adapter:cursorAdapter
}
lateinit var lv:ListView
lateinit var dBmanager: DBmanager
lateinit var btnDel:Button
lateinit var btnSend:Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cartctivity)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
lv = findViewById(R.id.lv)
btnDel = findViewById(R.id.btnDeleteCart)
btnSend = findViewById(R.id.btnSend)
dBmanager = DBmanager(baseContext, null)
val cursor = dBmanager.getCart()
if (cursor!!.moveToFirst()){
adapter = cursorAdapter(baseContext,cursor,0)
lv.adapter = adapter
}
btnDel.setOnClickListener {
dBmanager.delCart()
finish()
}
}
override fun onSupportNavigateUp(): Boolean {
//return super.onSupportNavigateUp()
onBackPressed()
return true
}
class cursorAdapter(context: Context,cursor: Cursor,flag:Int):CursorAdapter(context,cursor,0){
var _context = context
override fun newView(context: Context?, cursor: Cursor?, parent: ViewGroup?): View {
return LayoutInflater.from(_context).inflate(R.layout.cart_item,parent,false)
}
override fun bindView(view: View?, context: Context?, cursor: Cursor?) {
val tvName = view?.findViewById<TextView>(R.id.tvNombre)
val tvPrice = view?.findViewById<TextView>(R.id.tvPrecio)
val tvQuantity = view?.findViewById<TextView>(R.id.tvCantidad)
val ImImage = view?.findViewById<ImageView>(R.id.imImagen)
val tvImporte = view?.findViewById<TextView>(R.id.tvImporte)
val btnIncrease = view?.findViewById<Button>(R.id.btnIncremento)
val btnDecrease = view?.findViewById<Button>(R.id.btnDecremento)
tvName?.text =cursor?.getString(cursor.getColumnIndexOrThrow("name"))
tvPrice?.text =cursor?.getString(cursor.getColumnIndexOrThrow("price"))
tvQuantity?.text =cursor?.getString(cursor.getColumnIndexOrThrow("quantity"))
var id:Int? =cursor?.getInt(cursor.getColumnIndexOrThrow("_id"))
var cantidad:Int? =cursor?.getInt(cursor.getColumnIndexOrThrow("quantity"))
var image = cursor?.getString(cursor.getColumnIndexOrThrow("image"))
var price = cursor?.getDouble(cursor.getColumnIndexOrThrow("price"))
var qty = cursor?.getInt(cursor.getColumnIndexOrThrow("quantity"))
var importe = qty?.let { price?.times(it) }
if (tvImporte != null) {
tvImporte.text = importe.toString()
}
Picasso.get().load(_URLIMG+image).into(ImImage)
val dBmanager = DBmanager(_context,null)
btnIncrease?.setOnClickListener {
dBmanager.updateQuantity(id!!,cantidad!! +1 )
val cursor = dBmanager.getCart()
cursor!!.moveToFirst()
adapter.changeCursor(cursor)
}
btnDecrease?.setOnClickListener {
dBmanager.updateQuantity(id!!,cantidad!! -1 )
if (cantidad-1 == 0){
dBmanager.deleteItem(id)
}
val cursor = dBmanager.getCart()
cursor!!.moveToFirst()
adapter.changeCursor(cursor)
}
}
}
}
514 visitas
Capítulo 15 – IncreaseItem - Incrementar en uno un item »
Descarga el código del proyecto
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar