View.OnClickListener, ¿puede explicar?

Lo siento si esta pregunta puede ser estúpido para usted, pero soy nuevo en la programación de Android y no puedo envolver mi cabeza alrededor de la sintaxis de Java.

¿Puedes explicar qué pasa con esta línea de código paso a paso?

View.OnClickListener ourOnClickListener = new View.OnClickListener() { @Override public void onClick(View v){ ourMessage.setText(“The button got tapped”); } }; 

Hay una interfaz declarada dentro de la clase View , y es OnClickListener , se ve así en View.java source:

 /** * Interface definition for a callback to be invoked when a view is clicked. */ public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); } 

Normalmente se crearía una clase, y se tendrá que implementar esta interfaz:

 public void MyClass implements View.OnClickListener { @Override public void onClick(View view) { // do stuff } } 

Pero a veces no necesitas esta clase en un archivo separado. En su lugar, puede crear una clase interna anónima , es como crear nueva clase, que sólo los métodos son los de la interfaz especificada:

 new View.OnClickListener() { @Override public void onClick(View v){ ourMessage.setText(“The button got tapped”); } } 

A continuación, puede utilizar instancia de esta clase en todas partes la interfaz View.OnClickListener es necesario.

Lo que también vale la pena mencionar es que la clase interna anónima contendrá una referencia a la clase en la que lo está creando. Así que esto será legal y válido:

 public class MyClass { private int clicksCount = 0; private View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View view) { clicksCount += 1; } } } 

Aquí puede acceder clicksCount campo clicksCount , que es campo de MyClass incluso desde la clase interna que implementa OnClickListener . Nota lateral: si desea acceder a una variable, debe añadir un modificador final :

 public void testMethod(final int canAccess, int cantAccess) { final String test = otherView.getText().toString(); myView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Cannot access cantAccess, because it's not final if (test.length == 0) { // can access // do something } } } 
  • ¿Cómo obtener el número de días entre dos instancia de calendario?
  • Array List Intent extra en Java
  • Imprimir el contenido de un paquete a Logcat?
  • No se puede encontrar la clase de símbolo "Generated" para Dagger 2
  • Cómo establecer mediante programación un bloqueo o un pin para una aplicación
  • ¿Existe y es equivalente a la clase Point pero para los puntos 3D?
  • import javax.xml.transform no se puede resolver
  • cómo comprobar si una respuesta está en formato xml en lugar de HTML?
  • intento androide no activar
  • Vaya a la página en epub reader (PageTurner)
  • Java HttpURLConnection VS Android HttpURLConnection
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.