Recycleview的Android SelectAll功能{无法执行}

时间:2017-02-20 08:53:08

标签: android android-recyclerview android-viewholder

我在网格视图中有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());
        }
    }
}

1 个答案:

答案 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