2011-10-28 43 views
10

Tôi có một ListView trong một Activity và tôi đang thiết lập một adapter tùy chỉnh cho ListView.Các adapter trong Android có phải là các lớp bên trong tĩnh hoặc các lớp bên trong không tĩnh

lớp bộ chuyển đổi của tôi nên là:

private static class MyAdapter extends ArrayAdapter 

hoặc

private class MyAdapter extends ArrayAdapter 

Tôi đoán nó nên không có sự chênh lệch càng lâu càng adapter kèm trong tài liệu tham khảo hoạt động nhưng muốn xác nhận rằng.

+0

(Dành cho người đọc trong tương lai) Câu hỏi cuối cùng là ngược. Nếu bạn có một lớp bên trong tĩnh và cần truy cập vào hoạt động/bối cảnh, bạn nên sử dụng một WeakReference (nếu có bất cứ điều gì có thể sống lâu hơn hoạt động). Nếu lớp không phải là tĩnh và bên trong, nó có một tham chiếu mạnh tiềm ẩn đối với lớp bên ngoài. Trong trường hợp đó, bạn cũng cần phải cẩn thận về cách sử dụng bộ điều hợp. Sử dụng tĩnh có thể giúp tìm rò rỉ tiềm ẩn, nhưng bổ sung thêm chi phí trong việc truyền xung quanh một ngữ cảnh/weakreference. – lilbyrdie

+0

Ngoài ra, trong bất kỳ cuộc gọi nào trong bộ điều hợp có đối tượng Xem, ngữ cảnh có sẵn (View.getContext()). Bạn có thể sử dụng instanceof để đảm bảo đó là hoạt động của bạn. – lilbyrdie

Trả lời

15

Giữ đúng ngữ cảnh là tốt trong bộ điều hợp nếu bạn cẩn thận về cách bạn sử dụng bộ điều hợp. Các bộ điều hợp thường gắn liền với vòng đời của bối cảnh của chúng (một hoạt động) để nó ổn. Chỉ sử dụng một WeakReference nếu nó có ý nghĩa.

+0

Bạn có thể giải thích thêm về cách cẩn thận cách sử dụng bộ điều hợp không? Vì vậy, có vẻ như nó không nên có vấn đề gì trong số hai kể từ khi bộ chuyển đổi được gắn liền với chu kỳ hoạt động cuộc sống. – dnkoutso

+1

Đừng giữ bộ điều hợp trong một trường tĩnh có tuổi thọ lâu hơn các hoạt động của bạn chẳng hạn. –

+0

@RomainGuy nếu chúng ta rõ ràng 'null' đối tượng bộ điều hợp tĩnh trong' onDestroy() 'thì sao? nó là một cách tiếp cận tốt? –

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