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.
Repositorio en GitHub
Puedes ver el código completo de la app en mi perfil.
Diseñar layout de actividad principal
El layout es un ConstraintLayout, por el momento no importa mucho su diseño mientras tenga:
- 2 EditText de tipo numérico (para que acepte números)
- 1 Button, que será el encargado de sumar los números y llamar a la actividad
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.
Código Java de la actividad principal
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
.
El diseño de la segunda actividad
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>
Código Java de la segunda ctividad: recibir Intent y datos
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.