2012-08-05 11 views
6

Czy View.OnClickListener() jest funkcją lub interfejsem? Kiedy staramy się ustawić metodę onclicklistener() w android, używamy nową View.OnClickListener() i robaki mnie tam bo o ile mi wiadomo,View.OnClickListener() funkcja lub interfejs

  • nie musimy zainicjować obiekt klasy zawierające metodę statyczną do użycia tych metod. Dlaczego to robimy?
  • Gdy używamy implementacji narzędzi do implementacji interfejsu, nie nazywamy statycznych metod interfejsu.

Więc może ktoś mi powiedzieć, dlaczego to robimy:

  • nowy View.OnClickListener(), za korzystanie onclick() metoda?
  • Dlaczego używamy() z View.OnClickListener, jeśli jest to interfejs?

Dzięki za odpowiedź ..

Odpowiedz

14

Nie jestem pewien, czy rozumiem co piszesz na temat metod statycznych. View.OnClickListener to interfejs: http://developer.android.com/reference/android/view/View.OnClickListener.html

Aby ustawić kliknij słuchacza na widoku, należy zdać instancji wykonawczych interfejs OnClickListerner: http://developer.android.com/reference/android/view/View.html#setOnClickListener(android.view.View.OnClickListener)

Najczęstszym sposobem, aby to zrobić w android jest zdefiniowanie anonimowość klasę wewnętrzna (http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html), który realizuje OnClickListener jak

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

powyższy kod określa zarówno anonimową klasy wewnętrznej i tworzy egzemplarz niego. Jest to odpowiednik pierwszy definiując klasę wykonawczą View.OnClickListener (jeśli jest zdefiniowana w tej samej klasie)

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

A później za pomocą tego

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

Jedna rzecz, której nie rozumiem, to dlaczego używamy() podczas używania IMPLEMENTS do korzystania z interfejsu. –

+3

() jest wywołaniem do konstruktora anonimowej klasy wewnętrznej, tj. Gdzie tworzony jest obiekt implementujący OnClickListener. Google dla "anonimowej klasy wewnętrznej" lub zajrzyj tutaj http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java lub tutaj http://viralpatel.net/blogs/inner-classes-in-java/ – toucan

+0

Dzięki za ważne koncepcje. –

0

enter image description here

kod przykładowy,

Wewnętrznie działa w ten sposób,

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) { 

      } 
     }); 
    } 
} 
Powiązane problemy