Lớp bên trong là Bộ điều hợp, lớp bên trong bên trong là Trình nghe. Làm thế nào để truy cập (che khuất) Adapter thành viên/phương pháp từ người nghe?Hai lớp lồng nhau ẩn danh lồng nhau đôi. Làm cách nào để có được các thành viên cấp lớp ẩn danh cấp 1?
list.setAdapter(new Adapter() {
public View getView() {
// ...
button.setListener(new Listener() {
public void onClick() {
Adapter.this.remove(item);
}
);
}
});
Thông thường để truy cập các lớp học viên bên ngoài, bạn chỉ cần nói Outer.this.member, nhưng trong trường hợp này nó đã cho tôi những lỗi sau (bằng cách sử dụng lớp học thực tế):
error: not an enclosing class: ArrayAdapter
Vậy làm thế nào bạn có phải truy cập vào một thành viên lớp bên trong từ một lớp bên trong bên trong không? Tôi không thích nhiều lớp ẩn danh lồng nhau, nhưng trong trường hợp này tôi đang học một API mới và không chắc chắn về một cách rõ ràng hơn. Tôi đã có một workaround nhưng muốn biết anyways. remove() không thực sự bị che khuất bởi lớp bên trong để chỉ định lớp không thực sự cần thiết trong trường hợp này, nhưng muốn làm cho nó rõ ràng trong mã chính xác nơi phương thức remove() này là. Tôi cũng muốn biết trong trường hợp nó bị che khuất. Tôi tin rằng việc sử dụng Outer.$6.remove()
sẽ hiệu quả, nhưng tôi cũng không tin nó cũng như vậy.
Tôi hiểu. Tôi nghĩ rằng sẽ có một cú pháp ngôn ngữ để sử dụng để có được ở Adapter mà tôi không biết. BTW 'that' sẽ phải là cuối cùng. – Chloe
Tôi thích phương pháp này vì nó dễ đọc và rõ ràng. – skrat
Tôi nhận được một lỗi biên dịch trên dòng Adapter = Adapter.this; (Adapter không phải là một lớp kèm theo). Thay vào đó, bạn nên nói rằng cuối cùng Adapter rằng = này .. nếu ở tất cả .. – sethu