2015-09-24 18 views
5

Tôi đang gặp sự cố với số RecyclerView#Adapter liên quan đến notifyItemRangeChanged. Có vẻ như nếu số Adapter cho rằng kích thước của nó có kích thước là 0 từ lần gọi cuối cùng đến getItemCount, và sau đó tôi gọi Adapter#notifyItemRangeChanged(0, 1), thì Adapter sẽ bỏ qua cuộc gọi (ví dụ: không có mục mới được chèn vào).RecyclerView notifyItemRangeChanged không hiển thị dữ liệu mới

Đây có phải là hành vi mong đợi không?

Trả lời

13

Đây có phải là hành vi mong đợi không?

Câu trả lời ngắn gọn: có.

Từ các tài liệu trên notifyDataSetChanged() (có, phương pháp khác nhau, tôi biết, nhưng chỉ cần tham khảo nó ở đây vì nó giải thích sự khác biệt giữa mục thay đổithay đổi cấu trúc):

Có hai khác nhau các lớp của sự kiện thay đổi dữ liệu, thay đổi mục và thay đổi cấu trúc. Thay đổi mục là khi một mục duy nhất có dữ liệu được cập nhật nhưng không có thay đổi vị trí nào xảy ra. Thay đổi cấu trúc là khi các mục được chèn vào, xóa hoặc di chuyển trong tập dữ liệu.

Bây giờ có một đọc qua các tài liệu trên notifyItemRangeChanged() (tôi nhấn mạnh):

Đây là một sự kiện thay đổi mặt hàng, không phải là một sự kiện thay đổi cơ cấu. Nó chỉ ra rằng bất kỳ sự phản ánh nào của dữ liệu trong phạm vi vị trí đã cho đã lỗi thời và phải được cập nhật. Các mục trong phạm vi nhất định giữ nguyên cùng một danh tính.

Điều đó sẽ trả lời câu hỏi của bạn. Bạn đang thực hiện thay đổi cấu trúc (nghĩa là bạn đang thêm một mục), do đó notifyItemRangeChanged()không phải phương thức thích hợp để gọi. Thay vào đó, bạn nên gọi notifyItemRangeInserted() (hoặc số ít tương đương), điều này cho thấy một sự thay đổi cấu trúc đã được thực hiện.

+0

Ah, cảm ơn bạn đã trả lời chi tiết! Thật không may bởi vì cấu trúc bộ điều hợp của tôi bao gồm các chương con, vì vậy về cơ bản tôi muốn subadapter thông báo cho bộ điều hợp cha mẹ về sự thay đổi phạm vi khi một cái gì đó thay đổi thay vì làm mới toàn bộ bộ điều hợp gốc. Tuy nhiên, bây giờ tôi nghĩ về nó, những gì tôi nên làm thay vì sử dụng 'notifyItemRangeInserted' để bộ điều hợp phụ biết về dữ liệu mới ... anyway, tôi đang blabbering bây giờ. Cảm ơn một lần nữa :) – Jin

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