5

Tôi muốn có thể thay đổi OnItemClickListener cho ListView động. Tuy nhiên, API không rõ ràng về việc liệu điều này có được chấp nhận hay không, cũng như về kết quả sẽ như thế nào nếu tôi làm.Gọi setOnClickListener từ nhiều lớp chỉ dẫn đến một cuộc gọi lại không?

Điều tôi muốn là nếu tôi gọi listView.setOnItemClickListener() từ một lớp học và sau đó lại từ một lớp khác, thì chỉ có lớp mới hơn nhận được cuộc gọi lại.

Câu hỏi này cũng có thể áp dụng cho SetOnClickListener().

API có thể được triển khai để hoạt động theo cách này, nhưng thay vào đó, API có thể được triển khai để tất cả các lớp được gọi là setOnItemClickListener nhận được gọi lại.

Hành vi nào thực sự được API Android thực thi?

Trả lời

9

Kiểm tra mã AdapterView.setOnItemClickListener() nguồn here:

/** 
* Register a callback to be invoked when an item in this AdapterView has 
* been clicked. 
* 
* @param listener The callback that will be invoked. 
*/ 
public void setOnItemClickListener(OnItemClickListener listener) { 
    mOnItemClickListener = listener; 
} 

Trong thế giới Java, nói chung là một phương pháp setter sẽ tuôn ra những giá trị trước đó và thiết lập biến dụ của đối tượng với giá trị mới. Vì vậy, hành vi mà bạn đang nói đến là chỉ lớp mới hơn nhận được cuộc gọi lại.


nó có thể thay được thực hiện sao cho tất cả các lớp học được gọi là setOnItemClickListener được gọi lại.

Trong thế giới Java, điều này cũng có thể, trong trường hợp này, là thực hành OOP tốt, chúng tôi thường đặt tên nó là addOnItemClickListener(), cụ thể hơn, sử dụng Danh sách cửa hàng Listener/quản lý nhiều người nghe trong thực hiện thực tế. Đây không phải là cách AdapterView.setOnItemClickListener() được triển khai trong API.

+0

Sau khi đặt câu hỏi, tôi đã nghĩ về sự khác biệt trong danh pháp của việc thêm người nghe và đặt người nghe, và nhận ra đó sẽ là một từ sai nếu nó không hoạt động như tôi đã mong đợi. Điều này có vẻ giống như một ngữ nghĩa ngôn ngữ của con người hơn là một quy ước cụ thể của Java. Tôi nghĩ rằng tôi chỉ mong đợi để đọc một cái gì đó xác định điều này trong tài liệu API. Cảm ơn bạn đã làm rõ. –

4

Bạn được tự do setOnItemClickListener() bao nhiêu lần tùy ý, chỉ có OnItemClickListener gần đây nhất mới được sử dụng.

0
String className = "MyOnClickListener"; 
obj = (OnClickListenerInterface)(Class.forName(className).newInstance()); 

Bạn sẽ phải tạo giao diện cho người nghe nhưng bạn có thể thực hiện trình lắng nghe khác nhau trong clasess khác nhau, và sau đó được gọi là mỗi người trong số họ tự động được hiển thị trong phần mã này.

Các vấn đề liên quan