2012-08-05 7 views
6

¿View.OnClickListener() es una función o interfaz? Cuando tratamos de establecer un método OnClickListener() en Android, utilizamos nueva View.OnClickListener() y me había primo por lo que yo sé insectos,View.OnClickListener() una función o interfaz

  • que no necesitamos para inicializar un objeto de clase que contiene un método estático para usar esos métodos. ¿Por qué hacemos esto?
  • Cuando utilizamos implements inorder para implementar una interfaz, no llamamos a los métodos estáticos de la interfaz.

Así puede alguien decirme por qué lo hacemos:

  • nueva View.OnClickListener(), utilizando el método onclick()?
  • ¿Por qué usamos() con View.OnClickListener si se trata de una interfaz?

Gracias por su respuesta ..

Respuesta

14

no estoy seguro de entender lo que está escribiendo sobre los métodos estáticos. View.OnClickListener es una interfaz: http://developer.android.com/reference/android/view/View.OnClickListener.html

Para establecer un detector de clics en un punto de vista, se pasa un ejemplo implementando la interfaz OnClickListerner: http://developer.android.com/reference/android/view/View.html#setOnClickListener(android.view.View.OnClickListener)

La forma más común de hacer esto en Android es definir una clase interna anónima (http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html) que implementa OnClickListener como

myView.setOnClickListener(new View.OnClickListener() { 
    @Override   
    public void onClick(View v) { 
     // Handle view click here   
    } 
}); 

El código anterior tanto define una clase interna anónima y crea una instancia de la misma. Es equivalente a definir una primera clase que implementa View.OnClickListener (si está definida en la misma clase)

class MyOnClickListener implements View.OnClickListener { 
    @Override   
    public void onClick(View v) { 
     // Handle view click here   
    } 
} 

Y más tarde el uso de este

MyOnClickListener listener = new MyOnClickListener(); 
myView.setOnClickListener(listener); 
+0

Una cosa que no entendí es por qué usamos() cuando usamos IMPLEMENTOS para usar la interfaz. –

+3

() es la llamada al constructor de la clase interna anónima, es decir, donde se crea el objeto que implementa OnClickListener. Busque "clase interna anónima" o busque aquí http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java o aquí http://viralpatel.net/blogs/inner-classes-in-java/ – toucan

+0

Gracias por los conceptos importantes. –

0

enter image description here

código de ejemplo,

Internamente funciona algo como esto,

public class MyView{ 

public stinterface MyInterface{ 
     public void myOnClick(View view); 
    } 

} 

public class MyButton{ 
     View view; 

     public void setOnClicker(MyInterface onClicker) { 
      onClicker.myOnClick(view); 
     } 
    } 


public class MyExample{ 

    public void method(){ 
     MyButton myButton = new MyButton(); 
     myButton.setOnClicker(new MyInterface() { 
      @Override 
      public void myOnClick(View view) { 

      } 
     }); 
    } 
} 
Cuestiones relacionadas