2012-08-05 33 views
6

Có phải chức năng hoặc giao diện View.OnClickListener() không? Khi chúng tôi cố gắng thiết lập phương thức onclicklistener() trong android, chúng tôi sử dụng View.OnClickListener() mới và nó có lỗi với tôi ở đó theo như tôi biết,Chế độ xem.OnClickListener() một chức năng hoặc Giao diện

  • chúng tôi không cần khởi tạo đối tượng của lớp chứa phương thức tĩnh inorder để sử dụng các phương thức đó. Tại sao chúng ta làm điều này?
  • Khi chúng tôi sử dụng thực hiện inorder để triển khai giao diện, chúng tôi không gọi các phương thức tĩnh của giao diện.

Vì vậy, có thể một số một cho tôi biết tại sao chúng ta làm:

  • mới View.OnClickListener(), sử dụng phương pháp onclick()?
  • Tại sao chúng ta sử dụng() bằng View.OnClickListener nếu nó là một giao diện?

Cảm ơn trả lời của bạn ..

Trả lời

14

Tôi không chắc tôi hiểu những gì bạn đang viết về phương pháp tĩnh. View.OnClickListener là một giao diện: http://developer.android.com/reference/android/view/View.OnClickListener.html

Để thiết lập một listener nhấp chuột vào một cái nhìn, bạn vượt qua một dụ thực hiện giao diện OnClickListerner: http://developer.android.com/reference/android/view/View.html#setOnClickListener(android.view.View.OnClickListener)

Cách phổ biến nhất để làm điều này trong android là để xác định một lớp bên trong vô danh (http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html) mà thực hiện OnClickListener như

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

Đoạn mã trên cả hai định nghĩa một lớp bên trong vô danh và tạo ra một thể hiện của nó. Nó tương đương với đầu tiên xác định một lớp thực hiện View.OnClickListener (nếu được xác định trong cùng một lớp)

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

Và sau đó sử dụng

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

Một điều mà tôi không hiểu là tại sao chúng ta sử dụng() khi sử dụng IMPLEMENTS để sử dụng giao diện. –

+3

() là cuộc gọi đến hàm tạo của lớp bên trong ẩn danh, tức là, nơi đối tượng triển khai OnClickListener được tạo. Google cho "lớp bên trong vô danh" hoặc có một cái nhìn tại đây http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java hoặc tại đây http://viralpatel.net/blogs/inner-classes-in-java/ – toucan

+0

Cảm ơn các khái niệm quan trọng. –

0

enter image description here

Sample Bộ luật này,

Bên trong nó hoạt động như thế này,

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

      } 
     }); 
    } 
} 
Các vấn đề liên quan