2017-02-20 32 views
0

ReçycleView在网格视图中多张照片,我想完成选择全部功能,Android的全选功能{无法acomplish}

当有网格较少的项目可以查看没有滚动的屏幕,我可以做选择所有功能没有任何问题,因为这全部视图绑定到回收视图

但当项目较多,并且在滚动视图,并且是关闭屏幕的项目出现问题即它们仍然无法绑定到RecycleView而这一次,当用户按下全选,只有被查看的图像和绑定到Viewholder被选中。

我已经经历了许多反复试验,但未能做到这一点。 请求您提供一些解决方案。

下面是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

什么是selectedImageUrls? –

+0

这些都是图像的网址没什么别的 –

回答

1

问题与您的代码是,你只有那些项目查看这是目前可见的更新。 只要用户选择functinolaity全选,只需迭代并更新所有ImageItem或java bean或模型值为true。 拨打YourRecyclerView.notifyDataSetChanged()数据集已更改。现在,如果用户取消选择或选择任何单个项目,则只更新该bean对象,并调用YourRecyclerView.notifyItemChanged(int pos)该位置的项目已更改。

更新1:不要把layoutImage放在ImageItem豆。您无需在ImageItem中输入任何ViewHolder。现在holder.layout image的值可以根据if(imageItem.isSelected()) holder.layout image.setVisibilit(View.Visible) else //View.Invisible设置。 holder.layout image将始终在onBindViewHolder

+0

你是正确的我可以遍历所有的对象,并做同样的事情。但是,问题是我将如何获得布局** layoutImage **,那是视图holder.layout图像? –

+0

您是否在bean类中存储holder.layout图像? –

+0

我把ImageItems对象的值放在BindVeiwHolder –