Đâ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 đổi và thay đổ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()
là 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.
Nguồn
2015-09-24 19:18:10
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