2009-12-29 9 views
11

Hầu hết các mẫu mà tôi thấy xuất hiện để sử dụng một phương thức ẩn danh trong một cuộc gọi như button.setOnClickListener(). Thay vào đó, tôi muốn chuyển một phương thức được định nghĩa trên lớp Activity mà tôi đang làm việc. Tương đương với Java/Android của hệ thống xử lý sự kiện sau đây trong C# là gì?Android - Cách đặt phương thức có tên trong button.setOnClickListener()

Button myButton = new Button(); 
myButton.Click += this.OnMyButtonClick; 

đâu:

private void OnMyButtonClick(object sender, EventArgs ea) 
{ 
} 

Về cơ bản, tôi muốn tái sử dụng một phương pháp không mang tính chất để xử lý sự kiện click của nhiều nút.

Trả lời

14

Câu trả lời của Roman Nurik gần như chính xác. View.OnClickListener() thực sự là một giao diện. Vì vậy, nếu Hoạt động của bạn triển khai OnClickListener, bạn có thể đặt nó làm trình xử lý nhấn nút.

public class Main extends Activity implements OnClickListener { 

     public void onCreate() { 
      button.setOnClickListener(this); 
      button2.setOnClickListener(this); 
     } 

     public void onClick(View v) { 
      //Handle based on which view was clicked. 
     } 
} 

Không có đại biểu nào trong .Net, vì vậy bạn bị mắc kẹt khi sử dụng chức năng dựa trên giao diện. Trong. Net, bạn có thể chỉ định một chức năng khác nhau thông qua việc sử dụng các đại biểu.

+0

Tôi đã không nhận ra rằng Java không có loại đại biểu - cảm ơn bạn đã xóa thông tin đó! –

+1

Tôi thực sự chỉ cần xem qua bài viết này (nó thực sự là một bài báo cũ). Một số nhận xét thú vị về sự phân chia của họ không sử dụng các đại biểu. Tôi không biết liệu tôi có đồng ý vì tôi thích sử dụng các đại biểu trong .Net. http://java.sun.com/docs/white/delegates.html – GrkEngineer

1

Chữ ký của phương pháp này sẽ cần phải được này ...

public void onMyButtonClick(View view){ 

} 

Nếu bạn không sử dụng nút năng động, bạn có thể thiết lập các "onClick" sự kiện từ các nhà thiết kế để "onMyButtonClick". Đó là cách tôi làm điều đó cho các nút tĩnh trên màn hình. Nó dễ dàng hơn cho tôi để liên kết nó với C#.

+0

Lưu ý rằng tính năng này mới đối với Android 1.6, IIRC. – CommonsWare

8

Đối số cho View.setOnClickListener phải là một phiên bản của lớp View.OnClickListener (lớp bên trong của lớp View) .. Đối với trường hợp sử dụng của bạn, bạn có thể giữ một thể hiện của lớp bên trong này trong một biến và sau đó chuyển vào như vậy:

View.OnClickListener clickListener = new OnClickListener() { 
    public void onClick(View v) { 
     // do something here 
    } 
}; 

myButton.setOnClickListener(clickListener); 
myButton2.setOnClickListener(clickListener); 

Nếu bạn cần người nghe này qua nhiều chương trình con/phương pháp, bạn có thể lưu nó dưới dạng biến thành viên trong lớp hoạt động của bạn.