我在网格视图中有ReçycleView
张多张照片,我想完成全选功能,
当网格中可以在没有滚动的情况下在屏幕上查看的项目较少时,我可以毫无问题地选择所有功能,因为所有 视图都绑定到回收视图
但是当项目更多并且处于滚动视图中并且屏幕外的项目 ,即它们仍未绑定到RecycleView
时,会出现问题此时,当用户按下全部选择时,只有被查看的图像和 Bind 被选中。
我经历了许多试验和错误但未能做同样的事情。 请求您提出一些解决方案。
下面是RecycleView ImageItem模型以及选择所需的数据。
ImageItem imageItem = new ImageItem(path, imageView, layoutImage,
albumImage, selectionImage, uploadProgress, false, file, dbAlbumPhotos);
case SELECT_ALL:
if (imageHashMap != null && imageHashMap.size() > 0) {
for (ImageItem imageItem : imageHashMap.values()) {
if (!imageItem.isSelected()) {
imageItem.setSelected(true);
imageItem.getSelectionImage().setVisibility(View.VISIBLE);
selectedImageUrls.put(imageItem.getDbAlbumPhoto().getPhotoId(), imageItem.getDbAlbumPhoto().getUrlPhotoLarge());
}
}
}
答案 0 :(得分:1)
问题是您只更新当前可见的项目视图。
每当用户选择functinolaity Select All时,只需迭代并将所有ImageItem
或java bean或model值更新为true。
调用数据集已更改的YourRecyclerView.notifyDataSetChanged()
。现在,如果用户取消选择或选择任何单个项目,则仅更新该bean对象并调用YourRecyclerView.notifyItemChanged(int pos)
该位置的项目已更改。
更新1 :不要将layoutImage
放入ImageItem
bean中。您无需在ViewHolder
中添加任何ImageItem
。现在可以根据holder.layout image
设置if(imageItem.isSelected()) holder.layout image.setVisibilit(View.Visible) else //View.Invisible
值。 holder.layout image
将始终提供onBindViewHolder
。