5

Я сделал это StaggeredGridLayout для моего RecyclerView: enter image description hereStaggeredGridLayout путает при прокрутке

Вот код:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) { 

    Photo photo = mPhotos.get(position); 

    TextView titleView = ((CellViewHolder) viewHolder).titleTextView; 
     titleView.setText(photo.getTitle()); 

    TextView subTitleView = ((CellViewHolder) viewHolder).subtitleTextView; 
     subTitleView.setText(photo.getName()); 

    Picasso.with(mContext).load(photo.getPhotoUrl()).into(((CellViewHolder) viewHolder).imageView); 

    ImageView userImageOverlay = ((CellViewHolder) viewHolder).userImageOverlay; 

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams(); 

    if (position == 0 || position % 4 == 0) { 
     layoutParams.setFullSpan(true); 
     layoutParams.height = Math.round(Utils.convertDpToPixel(202.67f, mContext)); 
     titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21.67f); 
     subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12.00f); 
     userImageOverlay.setVisibility(View.VISIBLE); 
    } else if ((position - 1) % 4 == 0) { 
     layoutParams.setFullSpan(false); 
     layoutParams.height = Math.round(Utils.convertDpToPixel(360.00f, mContext)); 
     titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15.00f); 
     subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10.00f); 
     userImageOverlay.setVisibility(View.GONE); 
    } else { 
     layoutParams.setFullSpan(false); 
     layoutParams.height = Math.round(Utils.convertDpToPixel(180.00f, mContext)); 
     titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15.00f); 
     subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10.00f); 
     userImageOverlay.setVisibility(View.GONE); 
    } 
} 

Все отлично работает, за исключением, когда я прокручиваю его. Он рисует клетки положением в порядке убывания, и она оставляет пустые места в сетке:

enter image description here

Любые идеи, как сохранить тот же шаблон даже прокрутки его?

ответ

1

вам необходимо установить gap strategy

mLayoutMang.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS); 

GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS будет обновлять layous, когда состояние прокрутки изменяется на холостом ходу

+0

Я установил GapStrategy перед установкой менеджера компоновки в recyclerView, но это не дает никакого эффекта. Все такой же. – Roo

+0

@ Roo hmm, я не уверен, что вы делаете с динамической настройкой размеров элементов, в точности рекомендуется в recyclerview, но я мог ошибаться. – tyczj

+0

@Roo возможно вместо динамического изменения высоты ячейки, чтобы ячейка имела 2 изображения в одном и просто скройте один из них, когда вы нажмете свое условие '(позиция - 1)% 4 == 0' или надуйте другой вид в позиции – tyczj

Смежные вопросы