Đây là mã của tôi:cuối cùng biến địa phương có thể không có được khởi tạo trong lớp bên trong vô danh
final Foo myFoo = new Foo(new Inner() {
@Override
callback(){
myFoo.bar();
}
});
(Với tên hàm thực tế)
final MyArrayAdapter aa = new MyArrayAdapter(new View.OnClickListener() {
@Override
onClick(){
aa.notifyDataSetChanged();
}
});
Java là cho tôi một lỗi về cách myFoo sức mạnh chưa được khởi tạo. Có cách nào để sửa lỗi này không? Tôi có khả năng có thể thiết lập gọi lại để null khi tôi xây dựng các đối tượng và sau đó thay đổi nó sau đó, nhưng tôi hy vọng cho có được một cách sạch hơn. Bất kỳ ý tưởng? (Cũng sẽ không hiệu quả nếu Foo không được viết bởi tôi và không tiết lộ giao diện để thay đổi cuộc gọi lại sau)
Trong trường hợp bất kỳ ai tò mò, trong trường hợp cụ thể của tôi, Foo là một ArrayAdapter và bar là notifyDataSetChanged(). Những gì được hiển thị bởi bộ điều hợp phụ thuộc vào giá trị của các mục trong mảng và các giá trị đó thay đổi khi chúng được nhấp vào. Gọi lại là clickListener.
Bạn có thể không chỉ tham khảo _this.bar() _ hoặc _bar() _? –
không, mã thực tế của tôi phức tạp hơn ví dụ này và hàm gọi lại nằm trong một lớp bên trong ẩn danh khác – Drew
Tại sao bạn ghi đè notificationDataSetChanged? Từ tài liệu API, có vẻ như bạn nên gọi myFoo.registerDataSetObserver (new DataSetObserver() {}). – sharakan