En este post vamos a ver un ejercicio con Android que suma dos números (obtenidos de dos EditText) y muestra la suma en otra actividad, cambiando a través de un Intent.
Debido a que es un ejercicio para principiantes no vamos a ver buenas prácticas.
Puedes ver el código completo de la app en mi perfil.
El layout es un ConstraintLayout, por el momento no importa mucho su diseño mientras tenga:
Así que 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=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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: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="Sumar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText2" />
</android.support.constraint.ConstraintLayout>
El primer EditText
tiene el id editText
, y el segundo editText2
. El Button
tiene el id button
.
Es importante saber el id que tiene cada Widget porque después los vamos a recuperar en la vista.
Ahora veamos lo que controla la vista. Vamos a declarar las variables de los elementos y agregar un listener al botón para cuando se hace click sobre el mismo.
Dentro del listener sobrescribimos el método onClick y ponemos toda la lógica: obtener el texto, convertirlo a entero y sumarlo. Luego pasarlo a la otra actividad.
package me.parzibyte.sumarnmeros;
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);
// Recuperar Widgets de XML, no es obligatorio que tengan el mismo nombre
// pero es una buena práctica (y eso que dije que no veríamos buenas prácticas)
final EditText editText = findViewById(R.id.editText),
editText2 = findViewById(R.id.editText2);
Button button = findViewById(R.id.button);
// Ahora agregamos un listener al botón para saber cuando le den click
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Recuperamos los valores como String
String numero1String = editText.getText().toString(),
numero2String = editText2.getText().toString();
// Simple validación, si quieres ver una más bonita visita:
// https://parzibyte.me/blog/2019/02/25/validar-edittext-android-seterror-tooltip/
// Si las cadenas están vacías...
if (numero1String.equals("") || numero2String.equals("")) {
// Detener ejecución del método
return;
}
// Si el método no se detuvo...
// Convertir esas String a números Int, porque no podemos sumar cadenas
int numero1 = Integer.parseInt(numero1String),
numero2 = Integer.parseInt(numero2String);
// Hacer la suma
int suma = numero1 + numero2;
// Crear un Intent para cambiar
// Nota: al momento Actividad2 no está creada, ahorita la creamos
Intent intent = new Intent(MainActivity.this, Actividad2.class);
// Agregarle los datos que le pasamos
// Nota: "suma" es la clave con la que lo vamos a obtener "del otro lado"
intent.putExtra("suma", suma);
// Y ahora que ya tiene datos, cambiamos de actividad
// Nos vemos en Actividad2.java
startActivity(intent);
}
});
}
}
Todo se hace dentro del método onCreate
, que es un método del ciclo de vida de las apps de Android.
Para cambiar usamos Intent
como lo dije anteriormente. Para convertir una cadena a entero usamos Integer.parseInt
, y para pasar la suma usamos putExtra
que recibe una clave y un valor.
La clave la vamos a usar para recuperar ese mismo valor en la otra actividad llamada Actividad2
.
En la segunda actividad solamente hay un TextView
con id textView
. Está dentro de un ConstraintLayout
y el código es el siguiente:
<?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:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
El texto se lo vamos a poner desde Java en la Actividad llamada Actividad2
(que es a la que cambiamos desde la MainActivity
) cuyo código es el siguiente:
package me.parzibyte.sumarnmeros;
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 los datos que nos pasaron. El 0 es por si no se nos pasara
// nada, ya que se necesita un valor por defecto (defaultValue)
Intent intent = getIntent();
int sumaQueNosPasaron = intent.getIntExtra("suma", 0);
// Obtener Widget de vista
TextView textView = findViewById(R.id.textView);
// Armar un mensaje
String mensaje = "La suma es: " + sumaQueNosPasaron;
// Y ponerle la suma
textView.setText(mensaje);
}
}
Básicamente es llamar a setText
en el TextView
con el resultado que nos pasaron.
En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
Esta web usa cookies.