2017-02-20 8 views
0

У меня есть ReçycleView с несколькими фотографиями в виде сетки, и я хочу сделать Выбрать все функциональности,функциональности Android SelectAll для Recycleview {смог acomplish}

когда есть меньше элементов в сетке, которые можно просматривать на экран без прокрутки, я могу сделать выбор всех функций без проблем, так как все это просмотров привязаны к виду переработки.

Но проблема возникает, когда элементы больше и находятся в Scrollview и элементы, которые за пределами экрана то есть они еще не связываются с 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

Что выбраноImageUrls? –

+0

это URL-адреса изображений ничего больше –

ответ

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.

+0

вы правы, я могу перебирать все объекты и делать то же самое. Но проблема в том, как я получу макет ** layoutImage **, то есть view holder.layout image? –

+0

Вы сохраняете изображение holder.layout в классе bean? –

+0

Я помещаю значения для объекта ImageItems в BindVeiwHolder –