studio setonclicklistener event android android-layout android-button

setonclicklistener - set on click listener android



Botón Click Listeners en Android (3)

Posible duplicado:
¿Diferencia entre el evento OnClick () y OnClickListener?

Soy semi-nuevo en el desarrollo de Android y, cuando comencé, traté de evitar el uso del diseño xml por todos los medios necesarios, por lo que algunos de mis proyectos anteriores incluyen botones que crean explícitamente un OnClickListener y lo implementan como una clase interna anónima. Como -

final Button button = new Button(this); button.setText("Click to change second line of text"); OnClickListener buttonListener = new View.OnClickListener() { boolean clicked = false; int numClicks = 0; @Override public void onClick(View v) { if(numClicks > 5) { button.setText("STOP IT"); } numClicks++; if(clicked == false){ clicked = true; tv2.setText("Text Changed on Button Click"); } else { clicked = false; tv2.setText("Click again"); } } }; button.setOnClickListener(buttonListener);

Pero a medida que me familiaricé con Android, comencé a entender el valor de los diseños xml y los botones implementados como este

<Button android:id="@+id/button1" android:layout_height = "wrap_content" android:layout_width ="wrap_content" android:text = "lets do this" android:onClick = "DoIt" />

En el diseño xml, donde DoIt se definió en Java.

Mi pregunta es, ¿estos 2 métodos son funcionalmente la misma cosa? ¿Hay un OnClickListener definido por el compilador en algún lugar detrás de las escenas? ¿Hay alguna característica que intercambies usando de una manera u otra?


Aunque defina android: onClick = "DoIt" en XML, debe asegurarse de que su actividad (o contexto de visualización) tenga un método público definido con el mismo nombre exacto y la vista como parámetro. Android conecta sus definiciones con esta implementación en actividad. Al final, la implementación tendrá el mismo código que usted escribió en la clase interna anónima. Por lo tanto, en palabras simples en lugar de tener clase interna y attachement de oyente en actividad, simplemente tendrá un método público con código de implementación.


Estos son exactamente lo mismo. android:onClick se agregó en el nivel 4 de la API para que sea más fácil, más similar a la de Javascript y maneje todo desde el XML. Lo que hace internamente es agregar un OnClickListener en el Botón, que llama a su método DoIt .

Esto es lo que usa un android:onClick="DoIt" hace internamente:

Button button= (Button) findViewById(R.id.buttonId); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DoIt(v); } });

La única cosa con la que puede intercambiar usando android:onClick , como es habitual con la configuración XML, es que se vuelve un poco más difícil agregar contenido dinámico (programáticamente, podría decidir agregar un oyente dependiendo de sus variables). Pero esto se derrota fácilmente agregando su prueba dentro del método DoIt .


utilizando XML, debe configurar el oyente onclick usted mismo. Primero implements OnClickListener su clase implements OnClickListener luego agregue la variable Button button1; luego agregue esto a su onCreate()

button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(this);

cuando implemente OnClickListener necesita agregar el método heredado onClick() donde manejará sus clics