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"
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <Button
 8         android:id="@+id/boton"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:onClick="onBotonClick"
12         android:text="Botón:\n
13                       onClick Layout\n
14                       onLongClick Listener" />
15 
16     <TextView
17         android:id="@+id/text_view"
18         android:layout_width="match_parent"
19         android:layout_height="wrap_content"
20         android:clickable="true"
21         android:text="Fai click e
22                       \nPreme aquí por máis de 1 seg"
23         android:textSize="20sp" />
24 
25 </LinearLayout>

Código Java

 1 package com.example.u3_03_onlongclick;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.view.View.OnLongClickListener;
 9 import android.widget.Button;
10 import android.widget.TextView;
11 import android.widget.Toast;
12 
13 public class U3_03_OnLongClick extends Activity {
14 
15 	@Override
16 	protected void onCreate(Bundle savedInstanceState) {
17 		super.onCreate(savedInstanceState);
18 		setContentView(R.layout.activity_u3_03__on_long_click);
19 
20 		Button boton = (Button) findViewById(R.id.boton);
21 		boton.setOnLongClickListener(new OnLongClickListener() {
22 			@Override
23 			public boolean onLongClick(View v) {
24 				// TODO Auto-generated method stub
25 				Toast.makeText(v.getContext(), "Premeches 1 seg no botón", Toast.LENGTH_SHORT).show();
26 				return true;
27 			}
28 		});
29 
30 		
31 		
32 		TextView tv = (TextView) findViewById(R.id.text_view);
33 		tv.setOnLongClickListener(new OnLongClickListener() {
34 			@Override
35 			public boolean onLongClick(View v) {
36 				// TODO Auto-generated method stub
37 				Toast.makeText(v.getContext(), "Premeches 1 seg na etiqueta de texto", Toast.LENGTH_SHORT).show();
38 				return true;
39 			}
40 		});
41 
42 		tv.setOnClickListener(new OnClickListener() {
43 
44 			@Override
45 			public void onClick(View v) {
46 				// TODO Auto-generated method stub
47 				Toast.makeText(v.getContext(), "Fixeches click na etiqueta de texto", Toast.LENGTH_SHORT).show();
48 			}
49 		});
50 
51 	}
52 
53 	public void onBotonClick(View v) {
54 		Toast.makeText(this, "Fixeches Click no botón", Toast.LENGTH_SHORT).show();
55 	}
56 
57 	@Override
58 	public boolean onCreateOptionsMenu(Menu menu) {
59 		// Inflate the menu; this adds items to the action bar if it is present.
60 		getMenuInflater().inflate(R.menu.u3_03__on_long_click, menu);
61 		return true;
62 	}
63 
64 }
  • 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).