Capitulo 14 del Módulo 5 Carrito de compra

➜ 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:

  1. Inicialización de componentes: En el método onCreate(), estás inicializando varios componentes importantes: el ListView (para mostrar los productos), el DBmanager (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) 
  2. Consulta de productos del carrito: Utilizas el método getCart() de DBmanager para obtener todos los productos en el carrito. Luego, verificas si el Cursor 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 
    } 
  3. Clase cursorAdapter: Esta clase extiende CursorAdapter y se encarga de mapear los datos del carrito a la vista cart_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() 
  4. 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

Descarga el código del proyecto

Descarga el código fuente del proyecto adquiriendo el curso completo

Comprar

¡Qué aprenderás?

tooltip bs-tooltip-top bs-tooltip-end bs-tooltip-bottom bs-tooltip-start show fade tooltip-inner

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú