O evento onLongClick

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Introdución

Para continuar coa xestión de eventos imos ver como xestionar un click longo.

onLongClick()

  • Cando sobre unha vista se preme por duración de 1 segundo ou máis lánzase o evento LongClick que é capturado polo método onLongClick() asociado ao correspondente interface.
  • O método onLongClick() devolve un booleano para poder comprobar se o evento se consumou ou non. Se chegamos a premer por un segundo (ou máis) ou non.
    • Devolve true se puidemos capturar o evento e xa non fai nada máis.
    • Devolve false se non se puido capturar o evento e continua chamando a outros escoitadores tipo on-Click.

Caso Práctico

  • Comezamos creando o proxecto U3_03_OnLongClick
  • Esta actividade ten 2 vistas:
    • Un botón que se pode facer Click (usando a propiade do XML) e LongClick (capturado a través dun Listener)
    • Unha etiqueta de texto (en 2 liñas) na que se pode facer Click (hai que habilitalo) e LongClick. Neste último caso os dous eventos captúranse con cadanseu Listener.

Android 2013 U3 03 OnLongClick 01.jpg


XML do Layout

  • Observar a Liña 20 onde se habilita o TextView para sexa clickable.
  • Agora poderíase engadir ao compoñente a propiedade: android:onClick="onBotonClick"
<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:orientation="vertical" >

    <Button
        android:id="@+id/boton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onBotonClick"
        android:text="Botón:\n
                      onClick Layout\n
                      onLongClick Listener" />

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:text="Fai click e
                      \nPreme aquí por máis de 1 seg"
        android:textSize="20sp" />

</LinearLayout>

Código Java

package com.example.u3_03_onlongclick;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class U3_03_OnLongClick extends Activity {

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

		Button boton = (Button) findViewById(R.id.boton);
		boton.setOnLongClickListener(new OnLongClickListener() {
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(v.getContext(), "Premeches 1 seg no botón", Toast.LENGTH_SHORT).show();
				return true;
			}
		});

		
		
		TextView tv = (TextView) findViewById(R.id.text_view);
		tv.setOnLongClickListener(new OnLongClickListener() {
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(v.getContext(), "Premeches 1 seg na etiqueta de texto", Toast.LENGTH_SHORT).show();
				return true;
			}
		});

		tv.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(v.getContext(), "Fixeches click na etiqueta de texto", Toast.LENGTH_SHORT).show();
			}
		});

	}

	public void onBotonClick(View v) {
		Toast.makeText(this, "Fixeches Click no botón", Toast.LENGTH_SHORT).show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.u3_03__on_long_click, menu);
		return true;
	}

}
  • Liñas 21-28:
    • Cando se faga un LongClick en boton este executará o método onLonClick() que devolverá true se se chegou a consumar o evento.
    • Probar a cambiar a liña 26 a return false e executar a aplicación. Que pasa?


  • Liñas 33-40:
    • Acontece o mesmo que no caso anterior, so que para a etiqueta de texto.


  • Liñas 42-49:
    • Se na etiqueta sucede o evento Click chámase ao Listener correspondente da etiqueta.



-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).