Ir al contenido principal

Desarrollo en Android T09 - Eventos y Logs

Desarrollo en Android - Eventos y Logs


En ocasiones es útil o necesario programar 2 o más eventos diferentes a un mismo widget, como por ejemplo un click y un longclick, de forma que el componente pueda mostrar información o ejecutar otra tarea dependiendo de las necesidades del usuario.

Para hacer esto se escuchan los eventos y se asignan comportamientos a los componentes.

En este tutorial se detectarán los eventos Click LongClick directamente en el Layout y estos eventos activarán registros de Logs que permitirán al des arrollador conocer que esta pasando en el activity.


1. Para este tutorial se utilizará el LinearLayout para escuchar los eventos que pasen en todo el activity, para esto además de los parámetros habituales se agrega el id para poder vincular la UI con la lógica del proyecto.

xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    android:id="@+id/linearLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="mx.blogspot.salvadorhm.doseventos.MainActivity">

</LinearLayout>



2. Dentro de la clase se crea un objeto de tipo LinearLayout.

public class MainActivity extends AppCompatActivity {
    private LinearLayout linearLayout;


3. Se inicializa el objeto linearLayout dentro del método onCreate tal como se hace con los botones y otros widgets.

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

    linearLayout = (LinearLayout)findViewById(R.id.linearLayout);


4. En este ejemplo se crea un método de nombre linearLayout_onClic() que es donde se programa lo que se desea que se ejecute al hacer clic en el Activity, como se puede ver se utiliza el objeto Log y el método d, este método corresponde al debug.

El objeto Log permite separar los mensajes que serán visibles en la consola de desarrollador, y son los siguientes:

Debug - (depuración)
Verbose - v (Texto explicativo más detallado)
Info - i (Información)
Warn - w (Adverstencia)
Error - e (Errores)

Estas letras permiten clasificar los tipos de Log que se muestran, además de facilitar su lectura directamente en Android Studio en el Android Monitor.

private void linearLayout_onClick(){
    Log.d("linearLayout","Click");
}


5. De forma similar se programa el método linearLayout_onLongClick() para indicar el comportamiento al hacer click por 2 o más segundos dentro del activity

La sintaxis sugerida es el nombreDelWidget_EventoAProgramar.

private void linearLayout_onLongClick(){
    Log.d("linearLayout","LongClick");
}


6. Para programar el clic se crea un Listener de tipo onClickListener, tal como se muestra en el siguiente código, y se sobre escribe el médoto onClick.

Este Listener puede ser utilizado por N cantidad de widgets, y una forma para identificar al componente que lanzo este evento es con if, comparando la view que genero el evento con el componente que se creo e inicializo anteriormente en el punto 3.

private View.OnClickListener onClickListener new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(v == linearLayout)
            linearLayout_onClick();
    }
};


7. De forma similar se crea el Listener OnLongClickListener y se sobre escribe el método onLongClick, a diferencia de onClick este evento devuelve un valor boolean, esto para indicarle al SO Android que solo ejecute el evento onLongClick y no ambos.

private View.OnLongClickListener onLongClickListener new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        if(v == linearLayout)
            linearLayout_onLongClick();
        return true;
    }
};


8. Una vez creado los métodos que se ejecutarán, y los Listener que atrapan los eventos, se asigna al layout los Listener para que puedan atraparse los eventos Click LongClick, tal como se muestra en el siguiente código.

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

    linearLayout = (LinearLayout)findViewById(R.id.linearLayout);

    linearLayout.setOnClickListener(onClickListener);
    linearLayout.setOnLongClickListener(onLongClickListener);


9. El código completo se muestra a continuación.

package mx.blogspot.salvadorhm.doseventos;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;


public class MainActivity extends AppCompatActivity {

    private LinearLayout linearLayout;

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

        linearLayout = (LinearLayout)findViewById(R.id.linearLayout);

        linearLayout.setOnClickListener(onClickListener);
        linearLayout.setOnLongClickListener(onLongClickListener);
    }

    private View.OnClickListener onClickListener new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(v == linearLayout)
                linearLayout_onClick();
        }
    };

    private View.OnLongClickListener onLongClickListener new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            if(v == linearLayout)
                linearLayout_onLongClick();
            return true;
        }
    };

   
    private void linearLayout_onClick(){
        Log.d("linearLayout","Click");
    }

    private void linearLayout_onLongClick(){
        Log.d("linearLayout","LongClick");
    }

}


10. El resultado de la ejecución se muestra a continuación, se puede apreciar que en el Android Monitor aparecen los mensajes en la terminal dependiendo del evento que se atrapo.


 

11. En el Android Monitor se pueden filtrar los mensajes de Log que se quieren visualizar.

 





Comentarios

Entradas más populares de este blog

Creación de Librerías en Java

Creación de Librerías en Java   Las librerías son un conjunto de clases con funciones especificas que ayudan a desarrollar aplicaciones más complejas de una forma sencilla, por ejemplo si se requiere realizar cálculos matemáticos y emplear el funciones como el Seno o Coseno, simplemente se importa la librería Math y se utilizan estos métodos, en lugar de desarrollarlos. Java cuenta con una extensa lista de librerías disponibles dentro del JDK o desarrolladas por terceros, pero también existe la posibilidad de desarrollar librerías propias para reutilizar de forma más eficiente el código, por ejemplo si se trabaja de forma cotidiana con conexión a base de datos, se pueden desarrollar métodos genéricos que realicen la conexión, que validen las consultas, etc. de forma que su uso reduzca el tiempo de desarrollo e incremente la productividad. Para este tutorial se van a crear dos proyectos en NetBeans, uno sera la librería y el otro proyecto hará uso de esta.

Elegir la clase a ejecutar en NetBeans, MVC

Elegir la clase a ejecutar en NetBeans Para que java pueda ejecutar una aplicación esta debe tener un método conocido como punto de entrada, este método tiene la sintaxis: void static void main(String [] sax){ //código } En ocasiones en una aplicación tiene varios puntos de entrada, que pueden servir para probar diferentes partes de la aplicación sin tener que recorrer o pasar por varias clases, para esto se puede seleccionar directamente en las propiedades del proyecto que clase será la principal.

Librerías JOptionPane para generar ventanas de entrada y salida de datos

Para poder introducir datos leídos desde el teclado existen varias formas, una de ellas hace uso de la librería javax.swing.JOptionPane que entre otras opciones permite mostrar ventanas para introducir datos, y ventanas para mostrar valores. Con el uso de esta librería se crean pequeñas interfaces definidas por el sistema, pero ya se hace uso de las librerías graficas swing, que se verán más adelante.