5

Scrollen nach oben ich diesen StaggeredGridLayout für meine RecyclerView gemacht: enter image description hereStaggeredGridLayout vermasselt wenn

Hier ist der Code:

@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); 
    } 
} 

Alles funktioniert gut, außer wenn ich es nach oben. Es zieht Zellen durch Position in absteigender Reihenfolge und läßt es leere Räume in Raster:

enter image description here

Irgendwelche Ideen, wie man das gleiche Muster zu halten, auch sie Scrollen nach oben?

Antwort

1

benötigen Sie den gap strategy

mLayoutMang.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS); 

GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS setzen die layous aktualisieren, wenn die Scroll-Zustand

+0

Ich setze GapStrategy, bevor ich Layout-Manager auf RecyclerView setze, aber es gibt keine Wirkung. Immer noch das gleiche. – Roo

+0

@Roo hmm, ich bin mir nicht sicher, was Sie mit der dynamischen Anpassung der Artikel Größen tun, wird genau in Recyclerview empfohlen, aber ich könnte falsch sein – tyczj

+0

@Roo vielleicht anstatt die Höhe der Zelle dynamisch zu ändern, machen die Zelle 2 Bildansichten in einem und verstecken Sie einfach einen von ihnen, wenn Sie Ihre Bedingung "(Position - 1)% 4 == 0" oder eine andere Ansicht in der Position – tyczj