Re: [問題] GridLayoutManager要如何由左至右排列

作者: gcobc12632 (Ted)   2019-04-09 19:14:28
剛好最近有遇到類似的問題
又碰巧找到了一些規律 就常試把它寫出來看看
測試了一下 應該(?)是沒什麼太大的問題
我的解法比較偏向於資料的重新排序
但個人不太懂什麼矩陣轉置 所以是硬幹搞出來的
所以程式碼很雜 連我自己都不知道怎麼解釋
也請版上大大鞭小力一點……

//行數
private final int spanCount = 3;
//初始化 LayoutManager
GridLayoutManager manager = new GridLayoutManager(context, spanCount,
GridLayoutManager.HORIZONTAL, false);
//假設的原始資料
private final String[] strings = {"1", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "11", "12", "13"};
ArrayList<ArrayList<String>> temp = new ArrayList<>();
for (int i = 0; i < spanCount; i++) {
temp.add(new ArrayList<>());
}
for (int i = 0; i < strings.length; i++) {
for (int j = 0; j < spanCount; j++) {
if (i % count == j) {
temp.get(j).add(strings[i]);
}
}
}
private final ArrayList<String> array = new ArrayList<>();
int a = 0;
int b = 0;
int c = 0;
for (int i = 0; i < strings.length; i++) {
array.add(strings[a]);
if (i == strings.length - 1) {
break;
}
if (a + temp.get(c).size() >= strings.length) {
b++;
a = b;
c = 0;
} else {
a = a + temp.get(c).size();
c++;
}
}

這樣排序過後的 array 就可以直接照順序給 RecyclerView 用了
效果:
spanCount = 2
https://i.imgur.com/hUNp83k.png
spanCount = 3
https://i.imgur.com/OF2EUZZ.png
spanCount = 4
https://i.imgur.com/SkSP7UJ.png
不知道這樣有沒有符合原PO的想法?
如果有 BUG 的話 就……再說吧(逃
※ 本方法不適用於 StaggeredGridLayoutManager(資料排序會整個亂掉(懶得解了

Links booklink

Contact Us: admin [ a t ] ucptt.com