2015-03-03 26 views
14

Đây là điều: Bất kỳ ai cũng biết phương pháp setHasFixedSize? một số người nói rằng nó cho phép tối ưu hóa nếu tất cả các mục có cùng kích thước và trong lớp RecyclerView từ android.support.v7.widget, nó nhận xét với điều này: RecyclerView có thể thực hiện một số tối ưu hóa nếu nó có thể biết trước thay đổi trong bộ điều hợp nội dung không thể thay đổi kích thước của RecyclerView. Nếu việc sử dụng RecyclerView của bạn rơi vào danh mục này, hãy đặt điều này thành true.Khi nào chúng ta sử dụng recyclerView.setHasFixedSize?

Giả sử đó có ý nghĩa gì? Bất cứ ai có thể cho tôi thấy bối cảnh sử dụng nó hoặc giải thích về ý nghĩa "danh mục này" ở trên? cảm ơn rất nhiều.

+0

Tài liệu giải thích nó. 'RecyclerView có thể thực hiện một số tối ưu hóa nếu nó có thể biết trước rằng những thay đổi trong nội dung bộ điều hợp không thể thay đổi kích thước của chính RecyclerView. Nếu bạn sử dụng RecyclerView rơi vào danh mục này, hãy đặt giá trị này thành true.' –

+0

xin lỗi, tôi thực sự không hiểu các từ sau: "thay đổi" trong nội dung bộ điều hợp không thể thay đổi kích thước "" của chính RecyclerView. Nếu việc sử dụng RecyclerView của bạn rơi vào danh mục này, hãy đặt điều này thành true. những gì loại thay đổi, là nó kích thước của nó? nếu như vậy, sau đó những gì "kích thước" có nghĩa là? – machinezhou

+0

Recyclerview của bạn có thay đổi witdh hoặc chiều cao theo số lượng đối tượng trong bộ điều hợp của bạn không? –

Trả lời

9

Thật thú vị cho RecyclerView biết nếu kích thước của nó (chiều rộng và chiều cao kích thước) phụ thuộc vào nội dung adapter để tránh các hoạt động bố trí đắt tiền. Nếu RecyclerView biết trước rằng kích thước của nó không phụ thuộc vào nội dung bộ điều hợp, thì nó sẽ bỏ qua việc kiểm tra xem kích thước của nó có thay đổi mỗi lần một mục được thêm vào hoặc bị loại bỏ khỏi bộ điều hợp hay không. Điều này đặc biệt quan trọng vì việc chèn một phần tử xóa có thể xảy ra rất thường xuyên.

Nếu kích thước của RecyclerView (các RecyclerView chính nó) ...

... không phụ thuộc về nội dung adapter:

mRecyclerView.setHasFixedSize(true); 

... phụ thuộc trên nội dung bộ điều hợp:

mRecyclerView.setHasFixedSize(false); 

Nếu bạn kiểm tra RecyclerView class bạn sẽ thấy nó trong d etails bởi vì ngay bây giờ mHasFixedSize không được sử dụng ở nhiều nơi trong lớp đó.

Đặt thành đúng không có nghĩa là kích thước RecyclerView được cố định, có nghĩa là nó sẽ không thay đổi do thay đổi nội dung bộ điều hợp. Ví dụ, kích thước RecyclerView có thể thay đổi do thay đổi kích thước trên cha mẹ của nó.

5

setHasFixedSize() được sử dụng để cho phép RecyclerView giữ nguyên kích thước.

Thông tin này sẽ được sử dụng để tự động tối ưu hóa.

Đây là url tham khảo

http://antonioleiva.com/recyclerview/

Ví dụ:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list); 
recyclerView.setHasFixedSize(true); 
+0

Nếu dữ liệu từ máy chủ và kích thước của nó thường là không mong muốn, trong tình huống này chúng tôi đã không tốt hơn là không đặt phương thức đó là đúng, tôi có đúng không? – machinezhou

+0

vì vậy điều này dẫn tôi đến kết luận với: nếu có 20 biểu tượng và tôi muốn đặt chúng vào recyclerview, đây là cài đặt "danh mục" tốt nhất mà phương thức là đúng. Vui lòng sửa tôi. – machinezhou

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