Android

Ejercicio con Android: total de venta con IVA

Este es el segundo ejercicio con Android. Vamos a hacer una app que pida:

  • Cantidad de productos
  • Precio de cada producto

Y calcule el valor sin IVA, el IVA y el valor con IVA. El IVA es un impuesto del 16 % que se aplica al menos en México, supongo que en otros lugares puede variar.

Total de venta con IVA – Ejercicio Android

Por cierto, los resultados deben mostrarse en una segunda actividad.

Repositorio en GitHub

Puedes ver el código completo de la app en mi perfil.

Layout de actividad principal: pedir precio y cantidad

Para comenzar vamos a poner dos EditText de tipo numérico en donde se va a escribir la cantidad de productos y el precio por cada uno.

También vamos a poner un botón para que cuando se haga click se pase a otra actividad en donde se muestran los resultados.

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Precio"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:inputType="numberSigned"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Cantidad"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:ems="10"
        android:inputType="numberSigned"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:text="Ver total"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText2" />
</android.support.constraint.ConstraintLayout>

El primer EditText con id editText tendrá el precio, y el segundo con el id editText2 tendrá la cantidad de productos.

El único Button tiene el id button, este se encargará de pasar los datos a la otra actividad.

Código Java de la primera actividad

Para escuchar el click del botón, recuperar el precio y la cantidad de los productos vamos a programar un poco con Java.

Obtenemos referencias a los elementos de la vista y le ponemos un listener al botón; en el método onClick (sobrescrito) obtenemos el precio con la cantidad, calculamos el total bruto, iva y total neto.

Luego pasamos esos tres valores a la Actividad2 en donde simplemente los vamos a mostrar; para pasarlos usamos un Intent.

package me.parzibyte.ventaconiva;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Obtener referencia a los elementos
        final EditText editTextPrecio = findViewById(R.id.editText),
                editTextCantidad = findViewById(R.id.editText2);
        Button botonQueCalcula = findViewById(R.id.button);

        // Escuchar el click del botón
        botonQueCalcula.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Obtener ambos valores como cadena
                String precioString = editTextPrecio.getText().toString(),
                        cantidadString = editTextCantidad.getText().toString();
                // Si están vacíos no seguimos ejecutando más código
                if (precioString.isEmpty() || cantidadString.isEmpty()) return;

                // Si el código continúa hasta aquí significa que las cosas van bien
                // convertimos cadenas a double
                double precio = Double.parseDouble(precioString),
                        cantidad = Double.parseDouble(cantidadString);
                // Hora de hacer cálculos
                final double IVA = 0.16;
                double totalBruto = precio * cantidad;
                // Calcular por separado el IVA de ese total bruto
                double totalIva = totalBruto * IVA;
                // Finalmente el total neto es la suma de los anteriores
                double totalNeto = totalBruto + totalIva;
                // Ahora creamos un intent y ponemos los 3 datos
                Intent intent = new Intent(MainActivity.this, Actividad2.class);
                intent.putExtra("totalBruto", totalBruto);
                intent.putExtra("totalIva", totalIva);
                intent.putExtra("totalNeto", totalNeto);

                // Hacemos el cambio y nos vemos en Actividad2
                startActivity(intent);
            }
        });
    }
}

Todos los cálculos se hacen en esta actividad y los resultados se pasan a la siguiente.

El diseño de la segunda actividad

En la segunda actividad tenemos 3 TextView que van a mostrar los 3 valores. El layout XML queda así:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Actividad2">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />
</android.support.constraint.ConstraintLayout>

Los 3 elementos están dentro de un ConstraintLayout. Tiene el id textView1, textView2 y textView3.

Código Java de la actividad de resultados

En el código Java simplemente obtenemos la referencia a los elementos y les ponemos los valores que nos enviaron por el Intent.

Queda así:

package me.parzibyte.ventaconiva;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class Actividad2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_actividad2);

        // Obtener referencia
        TextView textView1 = findViewById(R.id.textView),
                textView2 = findViewById(R.id.textView2),
                textView3 = findViewById(R.id.textView3);

        // Recuperar valores
        Intent intent = getIntent();
        // El defaultValue es lo que se regresa si no se encuentra valor con la clave especificada
        double totalBruto = intent.getDoubleExtra("totalBruto", 0);
        double totalIva = intent.getDoubleExtra("totalIva", 0);
        double totalNeto = intent.getDoubleExtra("totalNeto", 0);

        // Ahora preparamos unos mensajes para ponerlos en los TextView
        String mensajeTotalBruto = "Bruto: " + totalBruto;
        String mensajeTotalIva = "IVA: " + totalIva;
        String mensajeTotalNeto = "Neto: " + totalNeto;

        // Finalmente le ponemos ese mensaje a cada TextView
        textView1.setText(mensajeTotalBruto);
        textView2.setText(mensajeTotalIva);
        textView3.setText(mensajeTotalNeto);
    }
}

Con eso terminamos por hoy.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Tramitar acta de nacimiento en línea de manera instantánea

En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…

5 horas hace

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esta web usa cookies.