Como hacer una calculadora simple en Android (y II)

En la entrada anterior estuvimos diseñando la layout de nuestra calculadora. Ahora toca hacer que funcione 🙂

Código

Aparte del algoritmo básico de la calculadora, lo principal es darle funcionalidad a los distintos botones. Para ello vamos a hacer uso de los listeners.

Un listener (o «escuchador» en español) es un objeto de una clase que implementa un interfaz que «le obliga» a tener una función que se ejecutará en el caso de que se produzca un evento determinado. Dicho así queda confuso, así que lo mejor es implementarlo para nuestra calculadora.

Lo primero será crear para cada uno de los recursos de la calculadora una variable de control, por ejemplo:

private EditText _edit;
private Button _b1;

Lo siguiente es asignar a cada una de estas variables, los objetos de cada uno de los recursos que ya han sido creados por la función setContentView(R.layout.main);. Para ello utilizamos la función miembro de la clase Activity findViewById, que busca un recurso por su identificador. En nuestro caso, y siguiendo con los dos recursos anteriores;

_edit = (EditText)findViewById(R.id.editTextos);
_b0 = (Button)findViewById(R.id.button0);

Y por fin, el listener. En nuestro caso tenemos 16 botones, pero 10 de ellos tiene un funcionalidad similar: queremos que al pulsar, aparezca en la casilla de edición el número que aparece como texto en el botón. Es por esto, que en vez de hacer 10 listeners para cada uno de los botones, optamos por la creación de un único listener común a todos ellos:

View.OnClickListener lsBoton = new View.OnClickListener() {
     @Override
     public void onClick(View arg0) {
         _edit.setText(_edit.getText()+((Button)arg0).getText().toString());
     }
};

Analicémoslo:

View.OnClickListener, es un interfaz que han de implementar aquellas clases que vayan a crear objetos listeners. Para no crear la clase ya que solo va a tener un uso mu concreto, hacemos un new del interfaz, pero definiendo la función que el listener nos «obliga» a tener, en este caso OnClick(). Dicha función recibe como argumento la View del recurso sobre el que se pincha (arg0), así que son un casting  podemos obtener de manera sencilla el valor del rótulo del botón.

Sólo nos queda asociar este listener a nuestro botones:

_b1.setOnClickListener(lsBoton);

Sólo nos queda repitir este paso para todos los botones numéricos, repitir un proceso similar con los botones de las operaciones y aplicar la lógica de la calculadora.

Extra

Existe otras dos  posibilidades para asignar el listener al botón.

La primera es definirlo desde el propio layout. Simplemente se le añade la propiedad android:onClick, dándole como valor la función a la que se llamará en el caso de producirse el evento Click. Por ejemplo:

android:onClick="funcion"

La segunda es hacer que la propia Activity implemente el interfaz View.OnClickListener, con lo cual será necesario definir la función onClick en su interior, pero podríamos asignar el objeto this como valor a las funciones de asignación de listeners

_b1.setOnClickListener(this);
class Calculadora extends Activity implments View.OnClickListener {
     ...
     @Override
     public void onClick(View v) {
           ...
     }
     ...
}

Puedes acceder al código de la calculadora en github
+ Info en | Android developers

 

Tags: , , ,

Compartir en Facebook Compartir en Twitter

6 Comentarios a “Como hacer una calculadora simple en Android (y II)”

  1. Adrian dice:

    A decir verdad me sirvió mucho tu trabajo, muchas gracias

  2. yesica dice:

    uy esto no es lo k necesito uuuuuuuuuuuuuyyyyyuuuuuyuyuuyuyuuyuyuyuyn jjajjajjajjajajaja

  3. jair0047 dice:

    Lol..
    Pero podrian subir el codigo Fuente del Proyecto para analizarlo..
    ¡?

  4. Alfredo dice:

    @jair0047 como puedes ver en el post, lo tienes publicado en GitHub 🙂

  5. eduardo dice:

    pero pueden subir el codigo completo porfavor

  6. Alfredo dice:

    @eduardo como puedes ver en el post, lo tienes publicado en GitHub 🙂

Dejar un comentario

XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>