18

Tôi có một mạng lưới so le có 2 cột. Điều này đang hoạt động. Những gì tôi muốn là ở vị trí 0 cho hàng để span trên 2 cột. Tôi đã làm điều này trước khi sử dụng khá dễ dàng GridLayoutManger như vậy:Kích thước khoảng thiết lập của một hàng trong StaggeredGridLayoutManager

   mGridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
        @Override 
        public int getSpanSize(int position) { 
         return position == 0 ? 2 : 1; 
        } 
       }); 

StaggeredGridLayoutManager không cung cấp cho tôi với chức năng này như GridLayoutManager làm.

Có cách nào khác để thực hiện việc này không? Tôi đã tìm kiếm nhưng không tìm thấy bất kỳ ai có cùng vấn đề, điều này thật đáng ngạc nhiên vì tôi cho rằng chức năng này khá hữu ích cho kịch bản của tôi và cuộn vô hạn, khi ProgressBar được hiển thị ở hàng cuối cùng của RecyclerView.

Trả lời

49

Bạn có thể sử dụng phương thức setFullSpan.
Bằng cách này, mục sẽ bố trí bằng cách sử dụng tất cả các khoảng diện tích.

Điều đó có nghĩa, nếu hướng dọc, chế độ xem sẽ có chiều rộng đầy đủ; nếu hướng nằm ngang, chế độ xem sẽ có chiều cao đầy đủ.

Something như thế này:

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

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams(); 
    layoutParams.setFullSpan(true); 
} 

Chú ý.
Nó hỗ trợ các chế độ xem bao trùm tất cả các cột, nhưng nó vẫn đủ cho trường hợp của bạn.

+2

Chính xác những gì tôi đang tìm kiếm. Cảm ơn rất nhiều Gabriele! –

+6

Điều gì sẽ xảy ra nếu bạn muốn mục cụ thể mở rộng chính xác 2 (trong số 3) cột? Thay vì kéo dài tất cả các cột. –

+0

@AdamJohns bạn không thể làm điều đó với LayoutManager này. –

Các vấn đề liên quan