標籤:div scroll position you 直接 缺陷 osi 就是 AC
遇到複雜的不規則列(即有的行顯示的列數多,有的行顯示的列數少,並且每列顯示的內容頁不一樣)對於這種需求在recyclerview出來之前的解決方案,要麼就是listview中嵌套girdview,要麼就直接使用scrollview,勉強可以實現此效果,但是這兩種實現都有非常大的缺陷--都不能進行item的複用。
有了recyclerview之後這種需求就迎刃而解了,並且實現這種效果利用recyclerview可以更好的實現MVC的思想,甚至可以根據資料模型動態更改recyclerview的顯示樣式。真正做到資料控制顯示的樣式,並且可以做到item的迴圈利用。
可以使用gridlayoutmanager結合GridLayoutManager.SpanSizeLookup的相關功能實現,建立GridLayoutManager的時候列數填寫所有可能列數的最小公倍數。再結合adapter中的:
@Override public int getItemViewType(int position) { return position == 0 ? 0 : type; }
即可實現。實現的關鍵代碼如下:
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2); layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return position == 0 ? 2 : 1; } }); ecyclerView.setLayoutManager(layoutManager);
關鍵代碼就在上面了,
layoutManager.setSpanSizeLookup
此句代碼是設定對應position位置的item的跨列數,比如第一行顯示一列,其他行顯示兩列的代碼實現如下:
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return position == 0 ? 2 : 1; } });
Android GridLayoutManager 某些item 獨站一行